Мениджър на процеси PHP FastCGI – PHP-FPM
PHP е един от най-широко използваните езици за програмиране за разработване на уеб сайтове. Когато става въпрос за ефективна обработка на големи обеми трафик, производителността на PHP може да окаже значително влияние върху цялостната скорост и отзивчивост на уебсайтовете. Именно тук се появява PHP FastCGI Process Manager (PHP-FPM ). PHP-FPM е широко разпространен алтернативен PHP манипулатор, който осигурява високопроизводителен метод за изпълнение на PHP скриптове.
В тази статия ще се запознаем с това какво представлява PHP-FPM, защо е от съществено значение за оптимизиране на производителността на уеб сървъра и как да го конфигурирате за вашите PHP-базирани приложения.
Какво е PHP-FPM?
PHP-FPM, или PHP FastCGI Process Manager, е реализация на FastCGI за PHP скриптове. FastCGI е протокол, който се използва за подобряване на производителността на уеб сървърите чрез по-ефективна обработка на заявките в сравнение със стандартния CGI (Common Gateway Interface). Докато CGI създава нов процес за всяка заявка (което води до висока консумация на ресурси), FastCGI поддържа пул от работни процеси, готови да обработват множество заявки, като по този начин намалява режийните разходи.
PHP-FPM добавя слой за управление на процесите върху FastCGI, като позволява функции като обединяване на процеси, създаване на работни процеси по заявка, плавно изключване и възможност за лесно справяне със среди с голям трафик. Сега това е де факто стандартният PHP манипулатор за много съвременни уеб сървъри, включително NGINX и Apache.
Защо да използвате PHP-FPM?
- Подобрена производителност: PHP-FPM може да обработва повече едновременни заявки с по-малко ресурси, като намалява натоварването на сървъра и ускорява времето за отговор. Това е от особена полза за уебсайтове с голям трафик или приложения, при които се наблюдават внезапни скокове в трафика.
- Управление на процеси: PHP-FPM позволява прецизно управление на процесите, като ви дава възможност да контролирате начина, по който PHP обработва заявките. Той използва пул от работници, който може да се регулира според очакваното натоварване, като осигурява ефективно използване на ресурсите на сървъра.
- По-добро оползотворяване на ресурсите: Тъй като PHP-FPM обединява процеси, той може да обслужва множество заявки с помощта на едни и същи работници, като свежда до минимум необходимостта от непрекъснато създаване и прекратяване на процеси. Това подобрява използването на паметта и ефективността на процесора.
- Постепенно влошаване: Когато е конфигуриран правилно, PHP-FPM може да се понижава плавно, като намалява броя на активните процеси, ако сървърът е претоварен, предотвратявайки пълен срив.
- Разширени функции: PHP-FPM включва усъвършенствани функции като slow-log за отстраняване на грешки, адаптивно пораждане на процеси и отчитане на състоянието, които дават представа за производителността и състоянието на вашите PHP приложения.
Ключови характеристики на PHP-FPM
- Пулове от процеси: PHP-FPM ви позволява да дефинирате няколко пула от работни процеси на PHP. Всеки пул може да бъде конфигуриран с различни настройки, което ви позволява да стартирате различни PHP приложения с различни изисквания за трафик на един и същ сървър.
- Адаптивно пораждане на процеси: PHP-FPM може автоматично да мащабира броя на работните процеси в зависимост от нивото на трафика. Той започва с минимален брой работни процеси и може да увеличи размера на пула, когато е необходимо, без да губи ресурси по време на периоди с нисък трафик.
- Бавен дневник: Функцията за бавен дневник в PHP-FPM записва заявките, които надхвърлят предварително определено време за изпълнение. Това помага на разработчиците да идентифицират и решават проблеми с производителността в техния PHP код.
- Страница на състоянието: PHP-FPM предоставя вградена страница за състоянието, която дава информация в реално време за състоянието на пула, активните работници, неактивните работници и други показатели, които могат да се използват за наблюдение на производителността.
- Постепенно изключване: PHP-FPM може да прекратява процесите грациозно, като позволява на текущите заявки да приключат, преди да се изключи. Това предотвратява внезапното прекратяване на работещите скриптове, като осигурява по-добро потребителско преживяване.
Как работи PHP-FPM
PHP-FPM работи като самостоятелен FastCGI сървър, който е интегриран с уеб сървър, като NGINX или Apache, за да обслужва PHP скриптове. Когато постъпи заявка, уеб сървърът препраща PHP заявката към услугата PHP-FPM, която управлява пул от работни процеси, за да изпълни PHP кода и да изпрати резултата обратно към уеб сървъра за доставка до клиента.
Ето опростена схема за това как PHP-FPM обработва заявка:
- Клиентска заявка: Потребител заявява уеб страница, която съдържа PHP код.
- Уеб сървърът получава заявката: Уеб сървърът (NGINX или Apache) получава заявката и я препраща към услугата PHP-FPM, като използва протокола FastCGI.
- PHP-FPM Worker обработва заявката: Един от работните процеси в пула на PHP-FPM обработва заявката, изпълнява PHP скрипта и връща резултата.
- Изпращане на отговор: Уеб сървърът получава резултата и го изпраща обратно на клиента като окончателно визуализиран HTML.
Създаване и конфигуриране на PHP-FPM
Стъпка 1: Инсталиране на PHP-FPM
В повечето дистрибуции на Linux PHP-FPM може да се инсталира чрез мениджъри на пакети. Тук са дадени команди за често срещани системи:
# За Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# За CentOS/RHEL
sudo yum install php-fpm
След като инсталирате, можете да стартирате услугата PHP-FPM:
sudo systemctl start php-fpm
Стъпка 2: Конфигуриране на пуловете на PHP-FPM
Основният конфигурационен файл за PHP-FPM обикновено се намира в /etc/php/7.x/fpm/pool.d/ или /etc/php-fpm.d/ в зависимост от дистрибуцията и версията на PHP. Всеки пул се дефинира в отделен файл, който обикновено е кръстен на уебсайта или приложението, което обслужва. Ето примерна конфигурация за пул:
[www]
потребител = www-data
група = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dynamic: Мениджърът на процеси може динамично да регулира броя на работните процеси в зависимост от търсенето.
- pm.max_children: Максималният брой работни процеси, които могат да бъдат създадени, за да обработват заявки.
- pm.start_servers: Броят на работните процеси, които се стартират при стартиране на PHP-FPM.
- pm.min_spare_servers и pm.max_spare_servers: Определят минималния и максималния брой на незаетите работни сървъри, което позволява на PHP-FPM да мащабира ресурсите в зависимост от натоварването.
- pm.max_requests: Максималният брой заявки, които даден работник може да обработи, преди да бъде прекратен и заменен. Това помага да се предотврати изтичането на памет в дълго изпълняваните скриптове.
Стъпка 3: Конфигуриране на уеб сървъра за използване на PHP-FPM
За NGINX:
В конфигурационния файл на NGINX (напр. /etc/nginx/sites-available/example.com) настройте PHP-FPM като PHP манипулатор:
сървър {
listen 80;
server_name example.com;
root /var/www/html;
местоположение / {
try_files $uri $uri/ =404;
}
местоположение ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
За да активирате PHP-FPM в Apache, уверете се, че модулът mod_proxy_fcgi е активиран:
sudo a2enmod proxy_fcgi setenvif
След това актуализирайте конфигурацията на виртуалния хост на Apache:
Име на сървъра example.com
DocumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
Стъпка 4: Тестване на конфигурацията
След като конфигурирате PHP-FPM и уеб сървъра си, рестартирайте услугите, за да приложите промените:
# За NGINX
sudo systemctl restart nginx
# За Apache
sudo systemctl restart apache2
За да проверите дали PHP-FPM работи, създайте файл phpinfo.php в главната директория на уеб сайта:
?php
phpinfo();
?>
Посетете файла в браузъра си (напр. http://example. com/phpinfo.php), за да видите дали PHP-FPM е посочен като обработващ.
Заключение
PHP-FPM е важен инструмент за оптимизиране на производителността на PHP, особено за уебсайтове с голям трафик. Той осигурява значителни предимства пред традиционните PHP манипулатори, като управлява ефективно процесите, подобрява използването на ресурсите на сървъра и предлага разширени функции като адаптивно мащабиране на процесите и бавно регистриране. Като конфигурирате PHP-FPM според конкретните си нужди, можете да гарантирате, че вашите PHP приложения работят гладко и ефективно дори при големи натоварвания.
Като следвате стъпките в това ръководство, трябва да сте на път да настроите и оптимизирате PHP-FPM за вашите PHP-базирани проекти.