На VPS с несколькими сайтами отдельные пулы PHP-FPM помогают разделить пользователей, сокеты и часть лимитов процессов. Это полезно для эксплуатации и доступа, но не превращает один сервер в несколько независимых машин. Пулы по-прежнему используют общие CPU, память, диск и часто одну MariaDB. Настройка должна учитывать оба уровня.
Фото обложки: Mike Beltzner; 388 King — server room (5278375500).jpg, CC BY-SA 2.0. Уменьшение размеров и преобразование в WebP; кадрирование не выполнялось. Тематический снимок не изображает инфраструктуру упомянутых провайдеров.
Сначала составьте карту сайтов
Для каждого домена запишите document root, версию PHP, пользователя файлов, пул, сокет и связанные задания. Проверьте, кто создаёт конфигурацию: системный пакет, панель или собственный шаблон. Если панель уже назначает отдельные пулы, задача состоит в проверке действующей схемы, а не создании ещё одного конкурирующего файла.
Отдельно отметьте каталоги с общими данными. Символическая ссылка на общий uploads или одинаковый пользователь могут разрушить ожидаемое разделение. Изменение uid требует проверки владельцев существующих файлов; слепой рекурсивный chown всего сервера затронет другие проекты.
Какие параметры относятся к пулу
| Объект | Назначение | Проверка |
|---|---|---|
| user/group | Пользователь рабочих процессов | Доступ только к нужным файлам |
| listen | Unix-сокет либо TCP-адрес | Совпадает с upstream сайта |
| listen.owner/group/mode | Доступ веб-сервера к сокету | Соединение без открытия сокета всем |
| pm и pm.max_children | Режим и верхняя граница числа процессов | Общий бюджет памяти всех пулов |
| Журналы/slowlog | Диагностика нужного приложения | Раздельные пути и закрытый доступ |
Шаг 1. Проверьте пользователей и каталоги
На изолированном стенде используйте отдельного системного пользователя для каждого независимого проекта. Сайт должен читать свой код и писать только в предусмотренные каталоги. Возможность одного пула прочитать конфигурацию другого WordPress означает, что файловая модель доступа ещё не обеспечивает требуемую границу.
Не используйте root в качестве рабочего пользователя приложения. Проверьте не только права самого document root, но и проход по родительским каталогам. Для общих системных библиотек достаточно чтения; каталог загрузок не должен давать право переписывать соседний сайт.
Шаг 2. Разведите сокеты
Каждому пулу назначьте понятное уникальное имя сокета. В конфигурации Nginx соответствующего домена upstream должен указывать именно на него. Ошибочная ссылка на соседний пул может проявиться работой от чужого пользователя, неожиданными настройками PHP или отказом доступа.
; Учебный фрагмент пула, пути и пользователи условные [project_a] user = project_a group = project_a listen = /run/php/project_a.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 pm = ondemand pm.max_children = 4 pm.process_idle_timeout = 15s
Имена www-data и путь /run/php подходят не каждой системе. Значение 4 — учебное ограничение, которое нельзя переносить на рабочий VPS без измерений. После изменения сначала выполните проверку конфигурации штатным бинарным файлом конкретной версии FPM. Только затем применяйте её по регламенту обслуживания.
Шаг 3. Посчитайте общий потолок процессов
Если три пула допускают по десять работников, сервер потенциально получит тридцать PHP-процессов. Средняя память одного запроса не является безопасным максимумом: импорт, генерация изображений и административные операции могут потреблять больше. Добавьте MariaDB, веб-сервер, ОС, кеш и фоновые команды.
Условный расчёт: три пула по четыре процесса при плановом бюджете 120 МБ на процесс дают 1 440 МБ только под PHP. Это не измерение конкретного сайта и не готовая рекомендация для VPS с 2 ГБ RAM. Реальный запас зависит от пиков и других служб. Для измерения полезны метрики конкретного пула и операции в момент проблемы.
Режим ondemand уменьшает число простаивающих процессов, но не устраняет суммарную конкуренцию при одновременном запуске. Dynamic может держать готовых работников, static — фиксированный набор. Выбирайте режим по характеру приложения, а ограничение памяти считайте независимо от удобного названия режима.
Шаг 4. Разделите диагностику
Назначьте журналам понятные пути с именем проекта и настройте ротацию. Время и часовой пояс должны позволять связать запрос Nginx с ошибкой PHP. Slowlog помогает найти длительное выполнение, но содержит технические сведения о приложении и не должен быть публичным.
Статус FPM содержит эксплуатационные данные. Если используете status endpoint, ограничьте его доступ по принятой схеме. Не открывайте его всему интернету ради графика. Отсутствие доступа к мониторингу не исправляют отключением защиты; используйте локальный агент или штатную интеграцию.
Шаг 5. Приёмка без воздействия на соседей
- Проверьте главную и административную операцию каждого сайта.
- Создайте тестовый файл через приложение и проверьте его владельца.
- Подтвердите, что проект A не пишет в каталог проекта B.
- Воспроизведите типичную задачу с измерением RAM и числа работников.
- Проверьте совпадение сокета, PHP-версии и журналов с картой сайтов.
- Сохраните исходный файл конфигурации и порядок обратного применения.
Не проверяйте изоляцию чтением реальных секретов соседнего проекта. Достаточно заранее подготовленного безвредного контрольного файла с нужными правами. При отказе 502 первым делом сверяйте путь, существование сокета и права соединения, а не увеличивайте таймауты.
Что отдельный пул не решает
Общий диск может заполниться журналами одного сайта, база — получить тяжёлый запрос, а cron — запустить несколько импортов одновременно. Для более сильного разделения могут понадобиться отдельные ресурсы и другая архитектура. Пул является инструментом управления PHP, а не обещанием полной отказоустойчивости VPS.
FAQ
Нужен отдельный FPM master каждому сайту?
Не обязательно. Несколько пулов могут работать в одной службе FPM. Версии PHP и требуемые эксплуатационные границы определяются отдельно.
Почему появился 502 после смены пользователя?
Проверьте сокет, права веб-сервера и пути. Изменение uid не исправляет автоматически существующих владельцев файлов.
Достаточно выставить мало max_children?
Это ограничит параллелизм, но может увеличить очередь. Нужны измерения памяти, длительности операций и общей загрузки.
Вывод
Рабочая схема — понятное соответствие домена, пользователя, пула и сокета, общий бюджет процессов и проверенная диагностика. Так легче локализовать проблему одного проекта и не принимать её за случайный сбой всего VPS.

Связанные материалы: Как выбрать VPS для нескольких сайтов и избежать общей точки отказа, Несколько сайтов на одном хостинге: доступы, изоляция и перенос, VPS для одного WordPress: ресурсы по измерениям.
Техническое основание: официальная документация. Проверено 29.10.2026. Порядок приёмки и учебные примеры — редакционная разработка HOSTIO.
Если выбираете площадку с SSH, сначала проверьте состав услуги и ответственность администратора. Посмотреть услуги Beget — партнёрская ссылка HOSTIO; она не подтверждает пригодность любого тарифа для описанной настройки.


