Что такое PHP-FPM и для чего он используется?

Ответ

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 просто пидарас шерстяной. Он, конечно, не серебряная пуля, но без него сейчас — как без рук, блядь.