Skip to content

Ошибка 502 Bad Gateway — что значит и как исправить

HTTP 502 Bad Gateway — ошибка прокси-сервера. Возникает когда nginx (или другой реверс-прокси) пытается передать запрос приложению, но приложение не отвечает или вернуло невалидный ответ.

  • 🚨 Сайт показывает страницу с заголовком «502 Bad Gateway»
  • 🔍 Причина — upstream-приложение (PHP-FPM, gunicorn, Node.js) недоступно для nginx
  • 🛠️ Чинится перезапуском приложения или его настройкой
  • ⚡ Чаще всего: приложение упало или не справляется с нагрузкой
КодГде проблемаКак выглядит
500В коде приложения (исключение)Приложение отвечает, но с ошибкой
502Приложение не отвечает или дало мусорПрокси не смог связаться с приложением

PHP-FPM, gunicorn, uwsgi или Node.js-процесс умер или завис. Nginx стучится — никто не отвечает.

Закончилась оперативная память, Linux убил процесс. Чаще всего на бюджетных VPS с 512 МБ RAM.

Приложение работает, но запрос обрабатывается дольше чем proxy_read_timeout у nginx (по умолчанию 60 сек). Прокси сдаётся, отдаёт 502.

4. Неправильная конфигурация nginx

Section titled “4. Неправильная конфигурация nginx”

В proxy_pass указан неверный адрес сокета или порта. Часто после переезда между серверами или обновления PHP.

5. Перегрузка приложения

Section titled “5. Перегрузка приложения”

PHP-FPM workers все заняты, новые запросы не принимаются. На пиковой нагрузке.

6. Перезагрузка сервиса в момент запроса

Section titled “6. Перезагрузка сервиса в момент запроса”

Если в момент когда пришёл запрос вы делаете systemctl restart php-fpm — клиент получит 502 на секунду.

1. Проверить работает ли upstream-сервис:

Terminal window
sudo systemctl status php8.2-fpm
sudo systemctl status gunicorn

Не active? — это и есть причина 502.

2. Посмотреть лог nginx:

Terminal window
sudo tail -50 /var/log/nginx/error.log

Типичные сообщения:

  • connect() failed (111: Connection refused) — приложение не запущено
  • upstream timed out — приложение слишком медленное, превышен timeout
  • no live upstreams — все upstream-серверы недоступны

3. Проверить память:

Terminal window
free -h
dmesg | grep -i 'killed process'

Если был OOM-kill — это причина.

4. Проверить какие порты слушаются:

Terminal window
sudo ss -tlnp | grep -E '8000|9000|3000'

Сравните с настройкой nginx (proxy_pass http://127.0.0.1:8000). Если порт не слушается — приложение не запущено.

Сценарий A: приложение упало

Terminal window
sudo systemctl restart php8.2-fpm # или gunicorn, или ваш сервис
sudo systemctl status php8.2-fpm # проверить что поднялось

Сценарий B: OOM — нет памяти

Terminal window
free -h

Решения:

  • Увеличить RAM на сервере
  • Добавить swap-файл
  • Уменьшить количество PHP-workers (pm.max_children в /etc/php/8.2/fpm/pool.d/www.conf)
  • Оптимизировать запросы которые жрут память

Сценарий C: запрос дольше 60 секунд (timeout) В nginx-конфиге:

proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;

Хотя лучше — оптимизировать запрос на стороне приложения. 60 секунд для веб-страницы это уже катастрофа.

Сценарий D: все workers заняты В pool.d/www.conf:

pm = dynamic
pm.max_children = 50 # было 10
pm.start_servers = 5

Перезагрузить PHP-FPM. Но сначала проверьте память — если нет ресурсов на 50 процессов, будет OOM.

Если сайт за Cloudflare и видите 502 от Cloudflare (его страницу) — значит ваш сервер вообще не отвечает. Cloudflare попробовал подключиться к origin и не смог. Иногда так бывает при блокировке IP Cloudflare на стороне хостера.

Что сделать: в Cloudflare → Security → Tools → проверить что IP Cloudflare не в чёрном списке у вашего firewall.

Самая частая причина 502 на shared/cloud хостинге — проблема на стороне хостера. Что делать:

  1. Подождите 2-5 минут (часто решается само)
  2. Если не прошло — напишите в техподдержку хостинга
  3. Параллельно подключите сайт к Monisite чтобы видеть сколько раз это повторяется — частые 502 это сигнал что нужно менять хостинг

502 — особенно неприятная ошибка потому что часто возникает спорадически: открываешь сайт — работает, обновляешь — 502, ещё раз — снова работает. Без мониторинга вы не узнаете о таких эпизодах вообще.

Monisite:

  • Проверяет ваш сайт каждую минуту из 3 регионов
  • Сразу присылает уведомление при 502
  • Показывает статистику: сколько 502 было за день, неделю, месяц
  • Помогает понять — это случайные сбои или системная проблема

Подключить мониторинг →