#Что происходит и когда применима инструкция
Ошибка синтаксиса в файле пула PHP-FPM обычно обнаруживается тестом конфигурации до запуска службы. Ещё возможны дублирующие listen, отсутствующий пользователь, недоступный путь журнала и несовместимые директивы после обновления PHP.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Опечатка или неизвестная директиваОпечатка или неизвестная директива. Служба не стартует, тест сообщает имя файла и строку. | Служба не стартует, тест сообщает имя файла и строку. | Исправить ровно указанную запись. |
| Конфликт socket/порта двух пуловКонфликт socket/порта двух пулов. Проверка конфигурации проходит, но запуск не может привязать адрес. | Проверка конфигурации проходит, но запуск не может привязать адрес. | Проверить уникальность listen и существующие слушатели. |
| Невозможно создать журнал или сокетНевозможно создать журнал или сокет. В системном журнале встречается Permission denied или No such file or directory. | В системном журнале встречается Permission denied или No such file or directory. | Проверить родительскую директорию и права. |
#Подробная пошаговая инструкция
- Не перезапускайте весь веб-сервер для поиска ошибкиСохраните снимок последних ошибок php-fpm и запишите название службы: php8.2-fpm, php8.5-fpm, php-fpm или отдельная служба панели. При нескольких версиях проверяйте именно ту, что обслуживает упавший сайт.
- SSH на Linux с systemdLinux · Терминал (Bash)КомандаНужен sudoSSH на Linux с systemd. Первое выводит кандидатов, второе — ошибки выбранной службы; PHP 8.2 — пример, замените. Журнал может содержать секретные пути.
systemctl --type=service --all | grep -E "php.*fpm|php-fpm"; sudo journalctl -u php8.2-fpm -n 80 --no-pager
- Запустите проверку синтаксиса без применения измененийВ SSH выполните тест непосредственно установленного двоичного файла FPM, а не php CLI. Смотрите первое сообщение об ошибке, его строку и имя файла pool.d. Успех означает корректный разбор конфигурации, но не гарантирует успешную привязку сокета.
- В Debian/Ubuntu для PHP 8.2; в другой сборке исполняемый файл может называться иначеLinux · Терминал (Bash)КомандаНужен sudoВ Debian/Ubuntu для PHP 8.2; в другой сборке исполняемый файл может называться иначе. -t только проверяет конфигурацию.
sudo php-fpm8.2 -t
- Откройте названный файл и найдите конкретную директивуСохраните резервную копию pool.d/имя.conf, затем откройте его редактором панели или через sudoedit. Проверьте закрытие квадратных скобок имени пула, формат key = value, отсутствие повторяющихся несовместимых параметров и реальные пути логов. Не удаляйте весь каталог pool.d ради одной ошибки.
- Если синтаксис верный, проверьте занятость listenВ каждом пуле должен быть свой адрес listen. Для Unix-сокета проверьте директорию /run и имя сокета, для TCP — кто слушает нужный порт; FPM нельзя выставлять в интернет. Проверьте, что веб-сервер подключён к тому же адресу.
- SSH с правами администратора, только чтениеLinux · Терминал (Bash)КомандаНужен sudoSSH с правами администратора, только чтение. ss показывает TCP-слушатели, для Unix-сокетов используйте ss -lxnp.
sudo grep -R -nE "^\s*listen\s*=" /etc/php/*/fpm/pool.d/*.conf; sudo ss -ltnp | grep -E "php-fpm|:9000"
- После исправления повторите тест и запустите службуТолько когда -t возвращает успешную проверку, выполните systemctl restart для нужного экземпляра в согласованное окно. Затем systemctl status и journalctl должны показать работу службы без повторного сообщения об ошибке; если не так, верните резервную копию.
- SSH, администратор, пример PHP 8.2Linux · Терминал (Bash)С осторожностьюНужен sudoSSH, администратор, пример PHP 8.2. restart кратковременно прервёт активные запросы; используйте только после согласования.
sudo php-fpm8.2 -t && sudo systemctl restart php8.2-fpm && systemctl is-active php8.2-fpmКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Проверьте два реальных адреса сайтаОткройте обычную страницу и один заведомо работающий PHP-маршрут. Проверьте HTTP-код и отсутствие 502 от веб-сервера, затем посмотрите журнал пула. Если только один сайт падает, уточните привязку его хоста к пулу.
#Как проверить, что проблема исправлена
Тест -t завершается успешно, служба active, сокет/порт слушает, запросы доходят до приложения без 502.
#Если не помогло — дальнейшая диагностика и откат
Если тот же сбой остаётся, проверьте права на файл конфигурации и установку версии PHP. Не подменяйте конфигурацию конфигурацией другой версии; передайте системный журнал администратору без секретных значений.