Како да конфигурирате PHP-FPM со NGINX
PHP-FPM (FastCGI Process Manager) е алтернатива на FastCGI имплементацијата на PHP со некои дополнителни функции корисни за сајтови со голем сообраќај. Тој е претпочитан метод за обработка на PHP страници со NGINX и е побрз од традиционалните методи базирани на CGI како што се SUPHP или mod_php
за извршување на PHP скрипта. Главната предност на користењето на PHP-FPM е тоа што користи значителна количина на помалку меморија и процесор во споредба со сите други методи за водење PHP. Примарната причина е што го демонизира PHP, а со тоа го трансформира во процес во заднина додека обезбедува CLI скрипта за управување со PHP барање.
Предуслови за конфигурација на PHP-FPM NGINX
- Можете да отворите SSH сесија на вашиот систем Ubuntu 18.04 користејќи root или корисник со овозможен sudo.
- Веќе имате инсталирано NGINX и PHP во вашиот систем Ubuntu 18.04.
Чекори за конфигурација на NGINX PHP-FPM
- Инсталирај PHP-FPM
- Конфигурирајте PHP-FPM базен
- Конфигурирајте NGINX за PHP-FPM
- Тестирајте ја конфигурацијата на NGINX PHP-FPM
1. Инсталирајте PHP-FPM
Nginx не знае како да изврши сопствена PHP скрипта. Потребен е PHP модул како PHP-FPM за ефикасно управување со PHP скриптите. PHP-FPM, од друга страна, работи надвор од околината NGINX со создавање на свој процес. Затоа, кога корисникот бара PHP страница, nginx серверот ќе го пренесе барањето до услугата PHP-FPM користејќи FastCGI. Инсталирањето на php-fpm во Ubuntu 18.04 зависи од PHP и неговата верзија. Проверете ја документацијата на инсталираниот PHP пред да продолжите со инсталирање на FPM на вашиот сервер. Претпоставувајќи дека веќе сте ја инсталирале најновата PHP 7.3, тогаш можете да инсталирате FPM користејќи ја следнава команда apt-get.
# apt-get install php7.3-fpm
Услугата FPM ќе започне автоматски, откако ќе заврши инсталацијата. Можете да го потврдите тоа користејќи ја следнава команда systemd:
# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
Docs: man:php-fpm7.3(8)
Main PID: 32210 (php-fpm7.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.3-fpm.service
├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
├─32235 php-fpm: pool www
└─32236 php-fpm: pool www
2. Конфигурирајте го PHP-FPM Pool
Услугата php-fpm создава стандарден базен, чија конфигурација (www.conf) може да се најде во папката /etc/php/7.3/fpm/pool.d
. Можете да го прилагодите стандардниот базен според вашите барања. Но, стандардна практика е да се создадат посебни базени за да се има подобра контрола врз распределбата на ресурсите за секој процес на FPM. Понатаму, сегрегирањето на базенот на FPM ќе им овозможи да работат независно со создавање на свој главен процес. Тоа значи дека секоја php апликација може да се конфигурира со свои поставки за кешот користејќи PHP-FPM. Промената во конфигурацијата на еден базен не бара од вас да ги стартувате или стопирате останатите FPM базени. Дозволете ни да создадеме FPM базен за ефективно водење на PHP апликација преку посебен корисник. За почеток, креирајте нов корисник кој ќе има ексклузивни права на овој базен:
# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user
Сега одете до директориумот за конфигурација FPM и креирајте конфигурациска датотека користејќи го вашиот омилен уредувач на текст како vi:
# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s
Горенаведените опции за конфигурација на FPM и нивните вредности се опишани подолу.
- [wordpress_site]: името на базенот и мора да биде единствено кај сите имиња на базени.
- корисник и група: корисникот и групата под кои ќе работи базенот.
- слушајте: името на сокет-датотеката за овој базен.
- listen.owner и listen.group: мора да одговара на корисникот и групата на кои работи NGINX. Во нашиот случај тоа е www-data.
- php_admin_value: Овозможува поставување приспособени вредности за конфигурација на php.
- php_admin_flag: Овозможува поставување на PHP булова знаменца.
- pm: Поставките за менаџерот на процесите и вредноста е Динамична значи дека бројот на мали процеси се поставува динамички врз основа на следните директиви.
- pm.max_children: максималниот број на деца што можат да бидат живи во исто време.
- pm.start_servers: Бројот на деца создадени при стартување.
- pm.min_spare_servers: минималниот број на деца во состојба на „неактивен“ (чекаат да се обработат). Ако бројот на неактивен процеси е помал од овој број, тогаш ќе се создадат некои деца.
- pm.max_spare_servers: максималниот број деца во состојба на мирување (чекаат да се обработат). Ако бројот на неактивен процеси е поголем од овој број, тогаш некои деца ќе бидат убиени.
- pm.process_idle_timeout: саканиот максимален број процеси на серверот во мирување. Се користи само кога вредноста на pm е поставена на динамична. Освен горенаведените поставки, исто така е можно да се пренесат неколку системски еколошки променливи на услугата php-fpm користејќи нешто како
env[PHP_FOO]=$bar
. На пример, додавањето на следните опции во горната конфигурациска датотека ќе ги постави името на домаќинот и привремената локација на папката во околината PHP.
...
...
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
...
...
Исто така, поставките за менаџерите на процеси во горната конфигурациска датотека на базенот се поставени на динамични. Изберете поставка што најмногу одговара на вашите барања. Другите опции за конфигурација за менаџерот на процеси се: - Статични: Ќе се одржува фиксен број на PHP процеси.
- ondemand: Не се создаваат деца при стартување. Децата ќе бидат прекинати кога ќе се примат нови барања на серверот.
Откако ќе завршите со креирањето на горната конфигурациска датотека, рестартирајте ја услугата fpm за да примените нови поставки:
# systemctl start php7.3-fpm
Базенот FPM ќе се креира веднаш за да опслужува php страници. Запомнете, можете да креирате посебна системска услуга со специфицирање на горната конфигурациска датотека FPM со што ќе ви овозможите да го стартувате/запирате овој базен без да влијаете на другите базени.
3. Конфигурирајте го NGINX за PHP-FPM
Сега креирајте блок сервер NGINX што ќе го користи горенаведениот FPM базен. За да го направите тоа, уредете ја вашата конфигурациска датотека NGINX и поминете ја патеката на сокетната датотека на базенот користејќи ја опцијата fastcgi_pass
внатре во блокот за локација за php.
server {
listen 80;
server_name example.journaldev.com;
root /var/www/html/wordpress;
access_log /var/log/nginx/example.journaldev.com-access.log;
error_log /var/log/nginx/example.journaldev.com-error.log error;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
Проверете дали горната поставка за конфигурација е синтаксички точна и рестартирајте го NGINX.
# nginx-t
# systemctl restart nginx
4. Тестирајте ја конфигурацијата на PHP-FPM NGINX
За да тестирате дали горенаведената конфигурациска датотека NGINX навистина го користи новосоздадениот базен на FPM, креирајте датотека со информации за php во веб-корот. Го користев /var/www/html/wordpress
како веб корен во горната конфигурациска датотека NGINX. Прилагодете ја оваа вредност според вашата околина.
# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php
Откако ќе завршите со креирањето на страницата со информации за PHP, посочете го вашиот омилен веб-прелистувач на неа. Ќе забележите дека вредноста на променливите $_SERVER[USER]
и $_SERVER[HOME]
укажуваат на wordpress_user
и /home /wordpress_user
соодветно што претходно го поставивме во конфигурациската датотека FPM и на тој начин потврдува дека NGINX ги опслужува страниците php користејќи го саканиот FPM базен.
Резиме
Во оваа статија научивме како да инсталираме php-fpm и да конфигурираме посебни базени за различни корисници и апликации. Научивме и како да конфигурираме блок сервер NGINX за да се поврземе со услуга PHP-FPM. PHP-FPM обезбедува сигурност, безбедност, приспособливост и брзина заедно со многу опции за подесување на перформансите. Сега можете да го поделите стандардниот PHP-FPM базен на повеќе базени на ресурси за да опслужувате различни апликации. Ова не само што ќе ја подобри безбедноста на вашиот сервер, туку и ќе ви овозможи оптимално да ги распределите ресурсите на серверот!