#Что происходит и когда применима инструкция
Два сайта могут случайно использовать один и тот же пул PHP-FPM из-за общей ссылки на сокет в конфигурации веб-сервера. Они тогда работают с одинаковыми правами и настройками среды, а конкурируют за pm.max_children; исправление требует проверки маршрута каждого виртуального хоста.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Одинаковый fastcgi_pass или SetHandlerОдинаковый fastcgi_pass или SetHandler. Веб-сервер для двух доменов указывает на один socket/port. | Веб-сервер для двух доменов указывает на один socket/port. | Сверить конфигурацию виртуальных хостов. |
| Два пула конфликтуют по адресу listenДва пула конфликтуют по адресу listen. Разные файлы pool.d объявляют одинаковый Unix-путь или TCP-порт, второй пул не может привязаться. | Разные файлы pool.d объявляют одинаковый Unix-путь или TCP-порт, второй пул не может привязаться. | Назначить непересекающиеся адреса и проверить запуск. |
| Панель хостинга намеренно даёт общий пулПанель хостинга намеренно даёт общий пул. Сайты одного владельца используют одинаковые UID и общий сервер по выбранному тарифу. | Сайты одного владельца используют одинаковые UID и общий сервер по выбранному тарифу. | Проверить модель изоляции с провайдером. |
#Подробная пошаговая инструкция
- Составьте список затронутых сайтов и запланируйте изменениеЗафиксируйте каждый домен, его document root, технического пользователя и текущую версию PHP. Перед работой получите резервную копию настроек и проверьте возможность возврата. Нельзя без согласования перенаправлять критичные сайты в новый пул.
- Выведите адреса FastCGI обоих виртуальных хостовВ Nginx ищите fastcgi_pass, а в Apache — SetHandler или ProxyPassMatch с proxy:fcgi; в панели хостинга адрес может формироваться автоматически. Сверьте путь и порт с listen из pool.d. Чтение полного вывода nginx -T может раскрыть секреты: не публикуйте его.
- SSH, администратор, только чтение конфигурации пулов Debian/UbuntuLinux · Терминал (Bash)КомандаНужен sudoSSH, администратор, только чтение конфигурации пулов Debian/Ubuntu. На панели используйте её штатную настройку.
sudo grep -R -nE "^\s*(\[|listen\s*=|user\s*=|group\s*=)" /etc/php/*/fpm/pool.d/*.conf
- Определите, должны ли сайты иметь разные праваДля разных владельцев и для приложений с секретами разделение по учётным записям предпочтительнее общего пула. Учтите: отдельные пулы FPM не дают полной изоляции уровня контейнера; общие ресурсы и, в пределах одного экземпляра, OPcache могут оставаться общими.
- Создайте второй пул с уникальными значениямиИспользуйте штатный мастер панели или на тестовом сервере создайте новый pool.d с уникальным именем, listen, user, group и отдельным пределом pm.max_children. Не копируйте чужие пароли, не используйте пользователя root и не ставьте всем сайтам общий writable-каталог.
- Перенаправьте один виртуальный хост на новый пулПосле успешной проверки php-fpm -t и перечитывания FPM измените fastcgi_pass или соответствующий обработчик только выбранного домена. Проверьте конфигурацию веб-сервера штатной командой и примените reload без остановки соседних сайтов.
- SSH, административные права, Debian PHP 8.2 + NginxLinux · Терминал (Bash)КомандаНужен sudoSSH, административные права, Debian PHP 8.2 + Nginx. Только проверка двух конфигураций; при ошибке остановитесь. Если используется Apache или панель, команды и порядок будут иными.
sudo php-fpm8.2 -t && sudo nginx -t
- Проверяйте отдельно оба сайтаОткройте одинаковый безопасный PHP-маршрут каждого сайта и проверьте его пользователя выполнения в закрытой диагностике, корректность записи собственных файлов и отсутствие чтения чужих. После запуска второго пула замерьте RAM: изоляция потребляет дополнительную память.
- Закрепите схему и порядок откатаУдалите тестовую диагностику, задокументируйте соответствие «сайт → версия PHP → пул → socket → пользователь». Если хоть один сайт получает 502, верните адрес сокета из резервной конфигурации и проверьте журналы обоих экземпляров.
#Как проверить, что проблема исправлена
У доменов разные FastCGI-адреса и процессы под назначенными пользователями; формы, авторизация и запись каждого сайта работают без доступа к данным другого.
#Если не помогло — дальнейшая диагностика и откат
При конфликте слушателей найдите дублирующий listen. Если панель пересоздаёт pool.d автоматически, меняйте назначение через панель или провайдера, а не вручную.