PHP-FPM несколько пулов

Часто требуется иметь раздельные настройки PHP для разных проектов на одном сервере. При работе связки PHP-FPM + nginx это решается через настройку нескольких пулов. Вот как это выглядит на CentOS или AlmaLinux — при использовании репозиториев remi:

1) стандартный конфиг /etc/opt/remi/php83/php-fpm.d/www.conf

2) отдельный конфиг /etc/opt/remi/php83/php-fpm.d/nextcloud.conf

Внутри прописываем разные сокеты. Основные параметры настройки выглядят так:

[nextcloud]
user = nginx
group = nginx
listen = /var/run/php-fpm/php83-nextcloud-fpm.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx

Тут /var/run - хорошее место для размещения сокетов. Подкаталог /var/run/php-fpm будет содержать несколько разных сокетов, которые относятся к разным версиям PHP и проектам. Такая организация размещения сокетов позволяет держать порядок в системе, не захламлять всё в одну кучу (одна крайность) или в разные каталоги (другая крайность).

Чтобы работала такая схема размещения, нужно в systemd сервисе прописать настройки для каталога хранения сокетов и его владельца и группу. Для этого переопределяем системный конфиг:

sudo mkdir -p /etc/systemd/system/php83-php-fpm.service.d
sudo nano /etc/systemd/system/php83-php-fpm.service.d/override.conf

Вписываем:

[Service]
RuntimeDirectory=php-fpm
RuntimeDirectoryMode=0750
RuntimeDirectoryPreserve=restart
User=nginx
Group=nginx

Перезапускаем:

sudo systemctl daemon-reload
sudo systemctl restart php83-php-fpm.service

Всё, можно прописывать сокет в настройке хоста nginx:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm/php83-nextcloud-fpm.sock;
    include fastcgi_params;
    ...
}

Так nginx и PHP-FPM будут иметь доступ к сокету. Перезапуск сервиса будет происходить корректно даже после перезагрузки компьютера. Если не создавать переопределения настроек systemd сервиса, то при таком пути к сокету была бы ошибка:

ERROR: unable to bind listening socket for address '/var/run/php-fpm/php83-nextcloud-fpm.sock': No such file or directory

Пришлось бы вручную создавать каталог /var/run/php-fpm — и после этого стартовать сервис PHP-FPM. А параметры User и Group в настройках systemd сервиса нужны, чтобы этот каталог не создавался бы под root:root — так была бы в логах ошибка вида:

2025/06/14 20:36:01 [crit] 7732#7732: *4 connect() to unix:/var/run/php-fpm/php83-nextcloud-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 72.240.19.58, server: nextcloud.example.com, request: "GET /index.php /204 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php83-nextcloud-fpm.sock:", host: "nextcloud.example.com"

Комментарии

Популярные сообщения из этого блога

Пропорциональное распределение суммы

Битрикс: своя геолокация

Bitrix24 API - разбор демо приложения третьего типа