PHP-FPM Linux (PHP-FPM)

PHP-FPM: Nginx возвращает 502, хотя php-fpm запущен

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Nginx возвращает 502 Bad Gateway, хотя systemctl показывает, что PHP-FPM работает. Служба может обслуживать другой пул или версию PHP, слушать другой сокет, отклонять соединение из-за прав либо падать при обработке запроса. Сначала сопоставьте конкретный upstream Nginx с конкретным пулом FPM.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

Nginx возвращает 502 Bad Gateway, хотя systemctl показывает, что PHP-FPM работает. Служба может обслуживать другой пул или версию PHP, слушать другой сокет, отклонять соединение из-за прав либо падать при обработке запроса. Сначала сопоставьте конкретный upstream Nginx с конкретным пулом FPM.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Не совпадают адреса подключенияСам факт active у другой службы FPM не создаёт нужный сокет.В Nginx fastcgi_pass указывает на путь, отсутствующий в listen пулаСверить файл конфигурации и запущенный пул
Сокет есть, но Nginx не разрешено соединятьсяУ права на доступ к Unix-сокету есть отдельные настройки.connect() failed (13: Permission denied)Проверить listen.owner/group/mode либо ACL
Пул занят или аварийно завершаетсяПроблема возникает в рабочем процессе или при нехватке ресурсов.502 чередуется с нормальными ответами, есть ошибки FPMПросмотреть журнал пула и запросов

#Пошаговая диагностика и исправление

  1. Проверьте код и точную запись NginxИз терминала клиента отправьте безопасный GET-запрос к PHP-странице; на SSH сервера откройте error_log Nginx и найдите запись по времени. Сообщения No such file, Permission denied, Connection refused, upstream prematurely closed connection указывают на разные причины.
  2. Первая команда клиентская, вторая на SSH с sudo; имя и путь журнала уточните в nginx -T
    Linux · Терминал (Bash)КомандаНужен sudo
    Первая команда клиентская, вторая на SSH с sudo; имя и путь журнала уточните в nginx -T.
    curl -sSI https://example.com/; sudo tail -n 80 /var/log/nginx/error.log
  1. Найдите выбранный fastcgi_passЧерез SSH выполните nginx -T, найдите server_name домена, location для PHP и значение fastcgi_pass (unix:/run/... или IP:порт). Не исправляйте соседние server-блоки и не создавайте вручную отсутствующий сокет.
    Linux · Терминал (Bash)КомандаНужен sudo
    Полный вывод может включать закрытые параметры; храните его локально.
    sudo nginx -T 2>&1 | grep -nE "fastcgi_pass|server_name|error_log"
  1. Определите конкретную службу FPM и пулОткройте список работающих служб PHP-FPM и параметры listen выбранного пула. В панели могут быть отдельные имена служб — php8.2-fpm, php8.5-fpm, fp2-php85-fpm и другие. Сравните именно обработчик домена.
  2. Только чтение; в системах без systemd используйте штатное средство управления
    Linux · Терминал (Bash)КомандаНужен sudo
    Только чтение; в системах без systemd используйте штатное средство управления.
    systemctl list-units --type=service --all | grep -i fpm; sudo ss -xlpn | grep -i php
  1. Проверьте тип сбоя и праваДля Unix-сокета по реальному пути примените namei -l и ls -l; для TCP смотрите ss -lntp. Параметры listen.owner/listen.group/listen.mode задают доступ; при ACL они могут игнорироваться. Разрешать всем запись в /run или открывать FPM-порт в интернет нельзя.
    Linux · Терминал (Bash)КомандаНужен sudo
    Оба адреса примерные: замените фактическими или пропустите нерелевантную команду.
    namei -l /run/php/php8.2-fpm.sock; sudo ss -lntp | grep 9000
  1. Исправьте конкретную службу и проверьте тестомСкопируйте конфигурацию изменяемого пула и Nginx. Исправьте совпадение listen/fastcgi_pass либо точечные права, затем выполните проверку синтаксиса FPM штатным исполняемым файлом нужной версии (обычно php-fpm8.2 -t) и nginx -t. Перезапускайте только затронутый FPM; до правки проверьте свободную память.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Имя бинарного файла примерное: проверьте наличие команды через command -v; на панели тест выполняется её инструментом.
    sudo php-fpm8.2 -t; sudo nginx -t

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. Перепроверьте PHP и статикуПовторите исходный HTTP-запрос снаружи, а затем запрос к CSS того же сайта. После перезапуска сокет снова должен существовать; в журнале Nginx не должно быть новых upstream-сбоев. Если проблема вернулась — смотрите ошибки FPM на момент перезапуска.

#Как проверить результат

PHP-страница возвращает ожидаемый код, fastcgi_pass совпадает с listen, сокет доступен нужному пользователю; после повторного запуска FPM ошибка 502 не возвращается.

#Если проблема не устранена

Если на части запросов возникает 502 из-за падения FPM-процесса, проверьте журнал расширений, memory_limit и OOM-killer. Не увеличивайте тайм-ауты и права без понимания причины.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.