#Симптомы и отличие от похожих неисправностей
После изменения владельца Unix-сокета (listen.owner, listen.group) служба PHP-FPM не может поднять пул либо стартует с ошибкой. Важно отличить ошибку конфигурации и отсутствие пользователя от обычного Permission denied при работе сайта. В отличие от ошибки доступа Nginx к уже существующему сокету, здесь диагностика начинается со статуса службы и проверки файла пула: ошибка возникает во время запуска или перезагрузки PHP-FPM после правки владельца.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Указанного владельца или группы нетВ директиве listen.owner или listen.group опечатка, пользователь был удалён при переносе сайта. | Тест конфигурации сообщает об ошибке имени пользователя или группы; getent не находит объект. | Проверить существование системной учётной записи и исправить опечатку. |
В пуле применяются ACL вместо listen.ownerВключены listen.acl_users или listen.acl_groups, поэтому обычные параметры владельца игнорируются. | Прочитанные значения отличаются от фактических прав сокета, ошибки могут быть не при старте, а при подключении. | Проверить ACL и выбрать один поддерживаемый механизм. |
| Каталог сокета недоступен или конфликтует другой пулРодительский каталог недоступен, владельцы поменялись либо два пула используют один адрес. | В журнале unable to bind listening socket, Permission denied для каталога или Address already in use. | Проверить путь, права каталога и уникальность listen. |
#Диагностика и пошаговое устранение
- Подключитесь и уточните, какая именно служба отказалаВ панели сервера откройте раздел служб и найдите PHP-FPM нужной версии. Без панели по SSH используйте стандартный терминал Windows/Linux и
ssh пользователь@сервер. Выполнитеsystemctl list-units --type=service --all "php*-fpm.service"и найдите имя вродеphp8.2-fpm.service. Не запускайте все службы PHP подряд: убедитесь, что именно этот обработчик привязан к нужному сайту.Linux · Терминал (Bash)КомандаПросмотр списка служб по SSH; права администратора не нужны. Если список пуст, сервис может иметь имя fp2-php85-fpm или быть запущен панелью иначе.systemctl list-units --type=service --all "php*-fpm.service"
- Посмотрите причину сбоя, а не только надпись failedПроверьте
sudo systemctl status php8.2-fpm --no-pagerиsudo journalctl -u php8.2-fpm -n 60 --no-pager(замените имя службы). Время записей сравните с моментом редактированияlisten.owner. Выделите первую причину:unknown user,unknown group,failed to chown,unable to bind. Если таких записей нет, проверьте путь error_log в главном конфигурационном файле FPM: некоторые установки не передают эти строки в systemd.Linux · Терминал (Bash)КомандаНужен sudoДля Debian PHP 8.2; имя службы подставить фактическое. Только чтение; sudo требуется для полного доступа к журналу.sudo systemctl status php8.2-fpm --no-pagersudo journalctl -u php8.2-fpm -n 60 --no-pager
- Найдите файл пула, в котором изменены права сокетаВ панели домена откройте конфигурацию обработчика PHP или найдите у администратора путь к пулу. Для пакетной Debian-установки часто используется
/etc/php/8.2/fpm/pool.d/, но у Fastpanel, стороннего PHP и контейнера он другой. Откройте файл в редакторе с правами администратора, выпишитеlisten,listen.owner,listen.group,listen.mode, а такжеlisten.acl_usersиlisten.acl_groups. Запишите исходные значения и сохраните копию файла до любых правок.
- Проверьте системные имена без изменения учётных записейВ терминале сервера выполните
getent passwd www-dataиgetent group www-dataтолько если именноwww-dataуказан в вашем файле; для других имён замените аргумент. Строка с данными подтверждает, что пользователь или группа существует; отсутствие вывода означает, что её нет в доступной базе учётных записей. Не создавайте автоматически нового пользователя только ради сокета — сначала выясните, кем должен владеть веб-сервер.Linux · Терминал (Bash)КомандаПример для системного пользователя/группы www-data; замените имена на те, что указаны в своём пуле. Просмотр без изменения системы.getent passwd www-datagetent group www-data
- Проверьте родительский каталог и отсутствие конфликта адресовЕсли
listenуказывает на путь типа/run/php/example.sock, сначала проверьтеls -ld /run/phpиnamei -l /run/php/example.sock(для отсутствующего сокета увидите ошибку последнего сегмента — это ожидаемо). Затем сравните адресаlistenнескольких пулов этой версии. Ваша цель — обеспечить выполнение поиска по родительским каталогам для управляющего процесса, а не раздать всем разрешения 777. При сообщении Address already in use ищите второй процесс с этим адресом, не удаляйте файл сокета работающего пула.
- Исправьте только неверные параметры и проверьте ACLЕсли найдено несуществующее имя, верните прежние корректные
listen.ownerиlisten.groupиз резервной копии или установите подтверждённые имя и группу системного веб-сервера. Для Linux обычно применяютlisten.mode = 0660; при заданныхlisten.acl_users/listen.acl_groupsучтите, что owner/group игнорируются. Изменения в ACL согласуйте отдельно. Настройкиuserиgroupворкеров пула не заменяют разрешения сокета и не должны меняться заодно. - Пример кода по темеINIТолько пример при существующем www-data и соответствующем пути; не копируйте адрес в пул с другим сокетом.
listen = /run/php/example.sock listen.owner = www-data listen.group = www-data listen.mode = 0660
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюНужен sudoТолько пример для PHP 8.2 на Debian: вторая команда выполняется после успешного теста и когда служба действительно не работает; restart прерывает текущие запросы. Команда перезагрузки выполняется только при успешной проверке конфигурации (оператор &&). При ошибке исправьте конфигурацию и повторите проверку; не запускайте перезагрузку вручную.
sudo php-fpm8.2 -t && sudo systemctl restart php8.2-fpmКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Проверяйте синтаксис до запуска или перезагрузкиПосле сохранения файла запустите тест нужного бинарника PHP-FPM: на Debian PHP 8.2
sudo php-fpm8.2 -t. При отрицательном результате запишите ошибку, восстановите конфигурацию из копии и повторите тест. Только успешный тест разрешаетsudo systemctl restart php8.2-fpmдля ранее упавшей службы. Для работающей службы предпочтительнее плавная перезагрузкаreload; с другими версиями замените команды на соответствующие вашей установке.
- Проверьте создание сокета и отдельно запрос сайтаУбедитесь, что служба теперь
active (running), файл сокета существует, а его собственник и группа соответствуют политике доступа. Через браузер откройте PHP-страницу сайта, затем проверьте журнал Nginx на отсутствиеPermission deniedпри обращении к сокету. Если служба запускается, но выдаёт 502, это уже вопрос доступа Nginx или несовпадающегоfastcgi_pass: не меняйте ещё раз владельца вслепую. При ухудшении верните резервный файл пула и повторите тест.
#Как проверить результат и что предпринять при неуспехе
Успех — конфигурация FPM проходит проверку, служба запускается, сокет создаётся с нужными правами и тестовый PHP-URL отвечает без 502. Если ошибка unknown user осталась, повторно проверьте имя и загрузку учётных записей; при Address already in use исследуйте второй пул. При откате восстановите копию исходных директив и запустите проверку синтаксиса.