Что означает 502 bad gateway Nginx и как исправить ошибку


502 bad gateway Nginx — ошибка, которая выводится веб-сервером Nginx в случае если он не может дождаться ответа от какого-либо сервиса. Nginx являясь прокси сервером не может обрабатывать скрипты, поэтому чаще всего он выступает фронтэндом для другого сервиса.

Это Apache или PHP-FPM в случае если обрабатываются PHP скрипты, также бэкендом может быть приложение на Ruby, Python (Flask, например) или что-то иное.



Поскольку Nginx обычно просто перенаправляет запросы (проксирует) сам только отдавая статику работа приложения зависит также от бэкенда.



Ошибка 502 nginx чаще всего выводится потому, что бэкенд стал недоступен. Устранить ее можно выяснив куда проксируются запросы и восстановив работу второго сервиса в цепочке участвующей в обработке запроса.


502 bad gateway nginx


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

less /etc/nginx/sites-enabled/SITENAME



! Пути к файлам и названия сервисов могут отличаться, всё зависит от дистрибутива и настроек, принцип везде один.




Бэкенд можно увидеть по директивам proxy_pass. Директива в файле может выглядеть так:

    proxy_pass http://127.0.0.1:8080;

Конфигурационный файл nginx полностью:

502 bad gateway nginx как найти причину


Видно, что перенаправление запросов идет на порт 8080, там обычно работает веб-сервер Apache.


Можно проверить доступен ли он, занимает ли тот порт, на котором его ожидает найти Nginx.

netstat -nltp | grep 8080

tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 8902/apache2



Процесс на порту 8080 есть,. значит сервис доступен. Если его нет, то нужно попробовать запустить.



Как исправить ошибку 502 bad gateway Nginx


Поскольку у нас процесс запущен пробуем перезапустить этот сервис. Возможно, бэкенд оказался перегружен запросами и из-за этого не отвечает.

Перед перезапуском можно поискать причину в логе, стандартный путь к нему в Debian /var/log/apache2/error.log


systemctl restart apache2


Перезапуска должно быть достаточно, если ошибка '502 bad gateway nginx' не исчезла нужно проводить диагностику по логам сервисов: самого nginx (документация про логгирование) и сервиса выступающего бэкендом.



В случае если проксирование идёт на порт 9000 — используется, вероятнее всего php-fpm, он перезапускается таким же образом


systemctl restart php-fpm


Бэкенд может быть вынесен на другую серверную машину — это также можно выяснить изучив конфигурационный файл Nginx. В нем вместо 127.0.0.1 будет другой адрес. Процесс устранения ошибки будет отличаться только тем, что запускать службы потребуется предварительно подключившись к нужному серверу по SSH.


В качестве превентивной меры можно настроить автоматический запуск служб после падения запустив их под runit или, например, установив пакет для мониторинга Monit, который будет запускать службы не дождавшись от них ответа.



Частыми причинами 502 ошибок является нехватка памяти серверу, об этом свидетельствуют сообщения «Out of memory» в логах, в таких случаях ситуацию может исправить подключение SWAP.

Сказать спасибо