PHP-FPM — это альтернативная реализация PHP FastCGI с дополнительными возможностями для высоконагруженных сайтов. Главная задача — эффективно обрабатывать PHP-запросы в веб-среде.
# Пример команды для запуска PHP-FPM
php-fpm -y /etc/php/8.2/fpm/php-fpm.conf -F -O
Архитектура "master-worker"
Преимущества перед mod_php:
Основные компоненты:
[global]
pid = /run/php/php8.2-fpm.pid
error_log = /var/log/php8.2-fpm.log
[www]
user = www-data
group = www-data
listen = /run/php/php8.2-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 = 35
Режим | Описание | Использование |
---|---|---|
static | Фиксированное число процессов | Стабильная нагрузка |
dynamic | Автомасштабирование | Переменная нагрузка |
ondemand | Создание при запросе | Очень низкая нагрузка |
Nginx конфигурация:
location ``` \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Apache конфигурация:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
Настройки пула процессов:
pm.max_children
= (Available RAM) / (Memory per PHP process)pm.max_requests
для предотвращения утечек памятиСтатус и мониторинг:
location /status {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
PHP-FPM — это мощный менеджер процессов PHP, обеспечивающий высокую производительность, стабильность и гибкость конфигурации. Он стал стандартом де-факто для современных PHP-приложений, особенно в сочетании с Nginx. Правильная настройка FPM критически важна для оптимальной работы высоконагруженных проектов.