Nginx Linux

Nginx: 502 Bad Gateway с PHP-FPM

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

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

Проверьте, запущен ли php-fpm, путь к сокету и права.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Что означают сообщения в логе
  5. Типовые исправления
  6. Если ошибка возникает периодически

#Что означает ошибка

Сообщение
502 Bad Gateway

502 Bad Gateway в связке nginx + PHP-FPM означает, что nginx принял запрос, но не смог получить корректный ответ от PHP-FPM: процесс не запущен, не слушает указанный сокет или порт, упал или недоступен из-за прав. Это ошибка прокси-уровня: сам PHP-код здесь ни при чём, пока обмен между nginx и FPM не налажен.

Единственный надёжный способ найти причину — прочитать error.log nginx. В нём будет конкретная строка: connect() failed (111: Connection refused), No such file or directory, Permission denied или upstream prematurely closed connection.

Проверьте, запущен ли php-fpm, путь к сокету и права.

#Причины и решения

Возможная причинаКак узнатьЧто делать
PHP-FPM остановленСервис.Проявляется как «502 Bad Gateway» или близкий по смыслу сбой.Запустите.
СокетПуть.Проявляется как «502 Bad Gateway» или близкий по смыслу сбой.Исправьте.
ПраваСокет.Проявляется как «502 Bad Gateway» или близкий по смыслу сбой.Выдайте.
ТаймаутДолгий скрипт.Проявляется как «502 Bad Gateway» или близкий по смыслу сбой.Увеличьте.

#Пошаговое решение

  1. Проверьте php-fpmЧерез консоль хостинга либо SSH найдите, какая версия PHP-FPM привязана к нужному сайту, и проверьте её службу systemctl status php8.2-fpm с реальным именем. Прочитайте её журнал на сообщения о падении/ошибке конфигурации; не перезапускайте чужую версию PHP.
  2. Сверьте fastcgi_passВ sudo nginx -T найдите блок location ~ \.php$ и директиву fastcgi_pass, затем сравните её сокет/порт с действующим listen нужного пула PHP-FPM. Устаревший путь к сокету после обновления PHP часто вызывает 502; скопируйте конфигурацию перед изменением.
  3. Проверьте error.logВ /var/log/nginx/error.log найдите запись точно в момент 502: connect() failed указывает на порт/сокет, Permission denied — на доступ, upstream prematurely closed connection — на сбой backend. После точечной правки выполните nginx -t, reload и проверьте один PHP-URL без изменения других сайтов.

#Что означают сообщения в логе

Connection refused или No such file — PHP-FPM не запущен либо путь в fastcgi_pass неверный. Permission denied — у пользователя nginx нет прав на сокет (проверьте listen.owner, listen.group и listen.mode в пуле). Prematurely closed connection — процесс FPM упал из-за фатальной ошибки или достиг лимита памяти.

#Типовые исправления

Запустите и включите службу php-fpm; сверьте путь сокета в конфигурации nginx (fastcgi_pass unix:/run/php/php8.2-fpm.sock;) с параметром listen в пуле; выровняйте владельца сокета (user nginx/www-data); после обновления PHP обновите версию в пути. Перезагрузите обе службы.

#Если ошибка возникает периодически

Проверьте журнал php-fpm на сообщения pm.max_children reached и увеличьте лимиты пула, если памяти достаточно. Включите slowlog для поиска зависающих скриптов и request_terminate_timeout, чтобы зависшие процессы не блокировали пул. Следите за OOM-killer в dmesg.

Linux · Терминал (Bash)КомандаНужен sudo
Проверка конфигурации, журнала, службы и сокета.
sudo nginx -t
sudo tail -n 50 /var/log/nginx/error.log
sudo systemctl status php8.2-fpm
ls -l /run/php/

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

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

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