#Что означает ошибка
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» или близкий по смыслу сбой. | Увеличьте. |
#Пошаговое решение
- Проверьте php-fpmЧерез консоль хостинга либо SSH найдите, какая версия PHP-FPM привязана к нужному сайту, и проверьте её службу
systemctl status php8.2-fpmс реальным именем. Прочитайте её журнал на сообщения о падении/ошибке конфигурации; не перезапускайте чужую версию PHP. - Сверьте fastcgi_passВ
sudo nginx -Tнайдите блокlocation ~ \.php$и директивуfastcgi_pass, затем сравните её сокет/порт с действующимlistenнужного пула PHP-FPM. Устаревший путь к сокету после обновления PHP часто вызывает 502; скопируйте конфигурацию перед изменением. - Проверьте 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.
sudo nginx -tsudo tail -n 50 /var/log/nginx/error.logsudo systemctl status php8.2-fpmls -l /run/php/