Менеджер процесів 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 включає в себе розширені можливості, такі як повільний журнал для налагодження, адаптивний запуск процесів і звіти про стан, які дають уявлення про продуктивність і працездатність ваших 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 обробляє запит: Один з робочих процесів в пулі 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]
user = www-data
group = 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:
server {
listen 80;
ім'я_сервера example.com;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.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:
</ span> </ span>
Ім'я сервера example.com
DocumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch
</VirtualHost
Крок 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.