Ошибка 502 Bad Gateway — что значит и как исправить
HTTP 502 Bad Gateway — ошибка прокси-сервера. Возникает когда nginx (или другой реверс-прокси) пытается передать запрос приложению, но приложение не отвечает или вернуло невалидный ответ.
- 🚨 Сайт показывает страницу с заголовком «502 Bad Gateway»
- 🔍 Причина — upstream-приложение (PHP-FPM, gunicorn, Node.js) недоступно для nginx
- 🛠️ Чинится перезапуском приложения или его настройкой
- ⚡ Чаще всего: приложение упало или не справляется с нагрузкой
Чем 502 отличается от 500
Section titled “Чем 502 отличается от 500”| Код | Где проблема | Как выглядит |
|---|---|---|
| 500 | В коде приложения (исключение) | Приложение отвечает, но с ошибкой |
| 502 | Приложение не отвечает или дало мусор | Прокси не смог связаться с приложением |
Частые причины
Section titled “Частые причины”1. Приложение упало
Section titled “1. Приложение упало”PHP-FPM, gunicorn, uwsgi или Node.js-процесс умер или завис. Nginx стучится — никто не отвечает.
2. OOM (Out of Memory)
Section titled “2. OOM (Out of Memory)”Закончилась оперативная память, Linux убил процесс. Чаще всего на бюджетных VPS с 512 МБ RAM.
3. Превышен timeout
Section titled “3. Превышен timeout”Приложение работает, но запрос обрабатывается дольше чем 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 на секунду.
Как диагностировать
Section titled “Как диагностировать”1. Проверить работает ли upstream-сервис:
sudo systemctl status php8.2-fpmsudo systemctl status gunicornНе active? — это и есть причина 502.
2. Посмотреть лог nginx:
sudo tail -50 /var/log/nginx/error.logТипичные сообщения:
connect() failed (111: Connection refused)— приложение не запущеноupstream timed out— приложение слишком медленное, превышен timeoutno live upstreams— все upstream-серверы недоступны
3. Проверить память:
free -hdmesg | grep -i 'killed process'Если был OOM-kill — это причина.
4. Проверить какие порты слушаются:
sudo ss -tlnp | grep -E '8000|9000|3000'Сравните с настройкой nginx (proxy_pass http://127.0.0.1:8000). Если порт не слушается — приложение не запущено.
Как исправить
Section titled “Как исправить”Сценарий A: приложение упало
sudo systemctl restart php8.2-fpm # или gunicorn, или ваш сервисsudo systemctl status php8.2-fpm # проверить что поднялосьСценарий B: OOM — нет памяти
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 = dynamicpm.max_children = 50 # было 10pm.start_servers = 5Перезагрузить PHP-FPM. Но сначала проверьте память — если нет ресурсов на 50 процессов, будет OOM.
Если 502 у Cloudflare
Section titled “Если 502 у Cloudflare”Если сайт за Cloudflare и видите 502 от Cloudflare (его страницу) — значит ваш сервер вообще не отвечает. Cloudflare попробовал подключиться к origin и не смог. Иногда так бывает при блокировке IP Cloudflare на стороне хостера.
Что сделать: в Cloudflare → Security → Tools → проверить что IP Cloudflare не в чёрном списке у вашего firewall.
Если не разработчик
Section titled “Если не разработчик”Самая частая причина 502 на shared/cloud хостинге — проблема на стороне хостера. Что делать:
- Подождите 2-5 минут (часто решается само)
- Если не прошло — напишите в техподдержку хостинга
- Параллельно подключите сайт к Monisite чтобы видеть сколько раз это повторяется — частые 502 это сигнал что нужно менять хостинг
Чем поможет Monisite
Section titled “Чем поможет Monisite”502 — особенно неприятная ошибка потому что часто возникает спорадически: открываешь сайт — работает, обновляешь — 502, ещё раз — снова работает. Без мониторинга вы не узнаете о таких эпизодах вообще.
Monisite:
- Проверяет ваш сайт каждую минуту из 3 регионов
- Сразу присылает уведомление при 502
- Показывает статистику: сколько 502 было за день, неделю, месяц
- Помогает понять — это случайные сбои или системная проблема
Что дальше
Section titled “Что дальше”- 504 Gateway Timeout — близкий «брат» 502
- 503 Service Unavailable
- 500 Internal Server Error