Как настроить отдельные пулы PHP-FPM в NGINX
Опубликовано: 15 февраля 2025 г. в 11:53:00 UTC
Последнее обновление: 12 января 2026 г. в 08:30:05 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 (которая должна находиться в контексте location), определяющую сокет 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 и не разделять дочерние процессы с другими виртуальными хостами.
