Ответ
PHP-FPM (FastCGI Process Manager) — это высокопроизводительный менеджер процессов PHP, реализующий протокол FastCGI. Он используется как отдельный сервис для обработки PHP-скриптов, работая совместно с веб-серверами (Nginx, Apache).
Основные задачи и преимущества:
- Отделение веб-сервера от обработчика PHP: В отличие от
mod_php(встроенного модуля Apache), FPM работает как независимый демон. Это повышает стабильность и позволяет перезапускать PHP без остановки веб-сервера. - Гибкое управление процессами: Поддерживаются различные режимы (
static,dynamic,ondemand) для контроля числа воркеров, что критично для управления памятью и нагрузкой. - Изоляция окружений: Можно создавать отдельные пулы (pools) для разных сайтов или приложений с уникальными настройками
php.ini, пользователями и группами Linux. - Эффективная обработка высоких нагрузок: Механизмы предзапуска воркеров и адаптивного пула минимизируют задержки при пиковых запросах.
Базовая конфигурация связки Nginx + PHP-FPM:
# В конфиге Nginx (site.conf)
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # Или 127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Ключевые настройки пула в www.conf:
; Режим управления процессами
pm = dynamic
; Максимальное число дочерних процессов
pm.max_children = 50
; Число процессов, запускаемых при старте
pm.start_servers = 5
; Минимальное число простаивающих процессов
pm.min_spare_servers = 2
; Максимальное число простаивающих процессов
pm.max_spare_servers = 10
Типичный сценарий использования: На проектах с высокой посещаемостью или микросервисной архитектурой, где требуется стабильная и масштабируемая обработка PHP-запросов.
Ответ 18+ 🔞
А, PHP-FPM, говоришь? Ну это, блядь, такая штука, чтобы PHP-скрипты не как приклеенные, а как отдельная банда работали. Представь: раньше в Apache был этот mod_php — вротберунчик, который в самом сервере сидел, как таракан в булке. Перезапустишь PHP — весь сервак лег. А тут — отдельный демон, ёпта! Живёт своей жизнью, а веб-сервер (Nginx там или Apache) просто кидает ему задачи, как начальник курьеру: «На, обработай!»
Чем он, сука, хорош-то?
- Разделение, блядь, труда: Веб-сервер — это одно, а PHP-FPM — совсем другое. Один может грохнуться, а второй — жить. Красота, а не жизнь. Стабильность — овердохуища.
- Умное управление толпой: Можно настроить, сколько этих воркеров-обработчиков будет дежурить. Как на заводе:
static— все на местах с утра,dynamic— часть работает, часть на подхвате,ondemand— вообще никого, пока не позовут. Память экономит, нагрузку держит. - Изоляция, как в тюрьме: Для каждого сайта можно свой пул завести — со своими настройками
php.ini, своим юзером в системе. Один сайт сдохнет — остальные даже не чихнут. Хитрая жопа, но удобная. - Для нагрузки, блядь, создан: Воркеры уже готовые крутятся, запрос прилетел — тут же схватили. Никаких этих «ой, щас процесс порожу, подожди пять секунд». Быстро, чётко.
Вот как его, подлеца, к Nginx пристёгивают:
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # Через сокет, обычно быстрее
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Смысл: «Эй, Nginx, видишь файл на .php? Не мучайся, отдай его вот этому сокету (или на порт 9000), пусть там разбираются, эти PHP-мозги».
А вот сердце настройки, в файле www.conf пула:
pm = dynamic
pm.max_children = 50 ; Больше этого числа не родит, хоть ты тресни.
pm.start_servers = 5 ; Сколько сразу выскочит при старте.
pm.min_spare_servers = 2 ; Минимум холостых, чтоб не скучали.
pm.max_spare_servers = 10 ; Максимум холостых, чтоб память не жрали почём зря.
Тут главное — не переборщить с max_children, а то память всю сожрут, эти прожорливые воркеры. Подозрение ебать чувствую, когда ставят 500 на машине с двумя гигами оперативки.
Где эту хрень используют? Да везде, где народу больше трёх человек. Серьёзные проекты, высокие нагрузки, микросервисы — тут без FPM просто пидарас шерстяной. Он, конечно, не серебряная пуля, но без него сейчас — как без рук, блядь.