Как настроить отдельные пулы PHP-FPM в NGINX
Опубликовано: 15 февраля 2025 г. в 11:53:00 UTC
В этой статье я рассмотрю шаги по настройке, необходимые для запуска нескольких пулов PHP-FPM и подключения к ним NGINX через FastCGI, что позволит разделить процессы и изолировать виртуальные хосты.
How to Set Up Separate PHP-FPM Pools in NGINX
Информация в этом посте основана на NGINX 1.4.6 и PHP-FPM 5.5.9, работающих на Ubuntu Server 14.04 x64. Она может быть верна или нет для других версий. (Обновление: я могу подтвердить, что в Ubuntu Server 24.04, PHP-FPM 8.3 и NGINX 1.24.0 все инструкции в этом посте по-прежнему работают)
Есть ряд преимуществ в настройке нескольких пулов дочерних процессов PHP-FPM по сравнению с запуском всего в одном пуле. Безопасность, разделение/изоляция и управление ресурсами приходят на ум как несколько основных.
Независимо от того, какова ваша мотивация, этот пост поможет вам в этом :-)
Часть 1 — Настройка нового пула PHP-FPM
Сначала вам нужно найти каталог, в котором PHP-FPM хранит свои конфигурации пула. В Ubuntu 14.04 это /etc/php5/fpm/pool.d по умолчанию. Вероятно, там уже есть файл www.conf , который содержит конфигурацию для пула по умолчанию. Если вы раньше не смотрели этот файл, скорее всего, вам следует просмотреть его и настроить параметры в нем для вашей установки, поскольку значения по умолчанию предназначены для довольно слабого сервера, но пока просто сделайте его копию, чтобы нам не пришлось начинать с нуля:
Конечно, замените «mypool» на то название, которое вы хотите, чтобы назывался ваш пул.
Теперь откройте новый файл с помощью nano или любого другого текстового редактора, который вам больше нравится, и настройте его в соответствии с вашими целями. Вероятно, вам захочется изменить номера дочерних процессов и, возможно, пользователя и группу, под которыми работает пул, но две настройки, которые вам обязательно нужно изменить, — это имя пула и сокет, который он слушает, иначе он будет конфликтовать с существующим пулом, и все перестанет работать.
Имя пула находится в верхней части файла и заключено в квадратные скобки. По умолчанию это [www] . Измените его на то, что вам нужно; я предлагаю то же самое, что вы назвали файл конфигурации, поэтому ради этого примера измените его на [mypool] . Если вы не измените его, похоже, PHP-FPM загрузит только первый файл конфигурации с этим именем, что, скорее всего, все сломает.
Затем вам нужно изменить сокет или адрес, который вы слушаете, который определяется директивой listen . По умолчанию PHP-FPM использует сокеты Unix, поэтому ваша директива listen, вероятно, будет выглядеть так:
Вы можете изменить его на любое допустимое имя, но я снова предлагаю придерживаться чего-то похожего на имя файла конфигурации, например, можно задать следующее:
Хорошо, тогда сохраните файл и выйдите из текстового редактора.
Часть 2 – Обновление конфигурации виртуального хоста NGINX
Теперь вам нужно открыть файл виртуального хоста NGINX с конфигурацией FastCGI, которую вы хотите изменить на новый пул, или, скорее, подключиться к новому сокету.
По умолчанию в Ubuntu 14.04 они хранятся в /etc/nginx/sites-available, но могут быть определены и в другом месте. Вы, вероятно, лучше знаете, где находятся ваши конфигурации виртуального хоста ;-)
Откройте соответствующий файл конфигурации в вашем любимом текстовом редакторе и найдите директиву fastcgi_pass (которая должна быть в контексте местоположения), определяющую сокет PHP-FPM. Вы должны изменить это значение так, чтобы оно соответствовало новой конфигурации пула PHP-FPM, которую вы создали на первом шаге, поэтому, продолжая наш пример, вы измените это на:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Затем сохраните и закройте этот файл. Вы почти закончили.
Часть 3 – Перезапуск PHP-FPM и NGINX
Чтобы применить внесенные вами изменения конфигурации, перезапустите PHP-FPM и NGINX. Может быть достаточно перезагрузить вместо перезапуска , но я нахожу это немного непредсказуемым, в зависимости от того, какие настройки были изменены. В конкретном случае я хотел, чтобы старые дочерние процессы PHP-FPM немедленно завершились, поэтому потребовался перезапуск PHP-FPM, но для NGINX перезагрузки может быть достаточно. Попробуйте сами.
sudo service nginx restart
И вуаля, готово. Если вы все сделали правильно, измененный вами виртуальный хост теперь должен использовать новый пул PHP-FPM и не разделять дочерние процессы с другими виртуальными хостами.