Miklix

Как настроить отдельные пулы 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, содержащий конфигурацию для пула по умолчанию. Если вы раньше не заглядывали в этот файл, скорее всего, вам стоит изучить его и изменить настройки под вашу систему, поскольку значения по умолчанию рассчитаны на довольно слабый сервер, но пока просто скопируйте его, чтобы нам не пришлось начинать с нуля:

sudo cp www.conf mypool.conf

Разумеется, замените «mypool» на любое желаемое название вашего бассейна.

Теперь откройте новый файл с помощью nano или любого другого текстового редактора и настройте его под свои нужды. Вероятно, вам потребуется подкорректировать номера дочерних процессов и, возможно, указать пользователя и группу, под которыми работает пул, но две настройки, которые вы обязательно должны изменить, — это имя пула и сокет, который он прослушивает, иначе возникнет конфликт с существующим пулом, и все перестанет работать.

Название пула находится в верхней части файла и заключено в квадратные скобки. По умолчанию это [www]. Измените его на любое желаемое; я предлагаю использовать то же имя, что и в конфигурационном файле, поэтому для примера измените его на [mypool]. Если вы этого не сделаете, похоже, PHP-FPM загрузит только первый конфигурационный файл с таким именем, что, скорее всего, приведет к проблемам.

Затем вам нужно изменить сокет или адрес, на котором вы слушаете, что определяется директивой listen. По умолчанию PHP-FPM использует сокеты Unix, поэтому ваша директива listen, вероятно, будет выглядеть так:

listen = /var/run/php5-fpm.sock

Вы можете изменить его на любое допустимое имя, но я всё же рекомендую использовать имя, похожее на имя файла конфигурации, например, установить его следующим образом:

listen = /var/run/php5-fpm-mypool.sock

Хорошо, тогда сохраните файл и закройте текстовый редактор.

Часть 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 php5-fpm restart
sudo service nginx restart

И вуаля, готово. Если вы всё сделали правильно, виртуальный хост, который вы модифицировали, теперь должен использовать новый пул PHP-FPM и не разделять дочерние процессы с другими виртуальными хостами.

Поделиться на BlueskyПоделиться на FacebookПоделиться на LinkedInПоделиться на TumblrПоделиться на XПоделиться на LinkedInЗакрепить на Pinterest

Миккель Кристенсен

Об авторе

Миккель Кристенсен
Миккель - создатель и владелец сайта miklix.com. Он имеет более чем 20-летний опыт работы в качестве профессионального программиста/разработчика программного обеспечения и в настоящее время работает на полную ставку в крупной европейской IT-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.