HTTP 502 Bad Gateway¶
HTTP 502 Bad Gateway — код состояния HTTP, сообщающий, что сервер, выступающий в роли шлюза или прокси, получил недопустимый ответ от вышестоящего (внутреннего) сервера при обработке запроса клиента. Код относится к классу ошибок сервера 5xx и означает, что запрос клиента сформирован корректно, но выполнить его не удалось из-за сбоя на стороне серверной инфраструктуры.
¶Место в модели HTTP
В клиент-серверной архитектуре запрос часто проходит несколько узлов: браузер → CDN или балансировщик → прокси-сервер (nginx, HAProxy) → приложение. Если прокси не может получить корректный ответ от внутреннего сервера — например, потому что тот не отвечает, отвечает некорректным HTTP-ответом или разорвал соединение, — прокси формирует ответ 502 Bad Gateway. Типичный вид ответа:
``` HTTP/1.1 502 Bad Gateway Server: nginx/1.24.0 Content-Type: text/html
<html> <head><title>502 Bad Gateway</title></head> <body> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx</center> </body> </html> ```
Строка заголовка Server указывает, какой именно компонент сформировал ошибку. Текст тела ответа может различаться: Apache пишет «500 Internal Server Error» в ряде случаев, Cloudflare — «Cloudflare 502 Bad Gateway», HAProxy — «502 Bad Gateway» с указанием backend-сервера.
¶Основные причины
| Причина | Описание |
|---|---|
| Недоступность внутреннего сервера | Процесс приложения (PHP-FPM, Node.js, Gunicorn) упал или не запущен |
| Таймаут ответа | Внутренний сервер отвечает дольше, чем разрешено таймаутом прокси (по умолчанию в nginx — 60 секунд) |
| Некорректный ответ | Внутренний сервер вернул нечитаемые данные, обрезанный ответ или неверные заголовки |
| Сетевые проблемы | Разрыв соединения между прокси и backend, неправильная маршрутизация, битый DNS |
| Переполнение ресурсов | Не хватает памяти, процессов или файловых дескрипторов |
| Некорректная конфигурация | Ошибки в настройках nginx, HAProxy, балансировщика или TLS-сертификатов |
| Файрвол | Брандмауэр блокирует трафик между узлами |
¶Отличие от других ошибок 5xx
- 500 Internal Server Error — ошибка внутри самого приложения; приложение запущено, но упало при обработке запроса.
- 502 Bad Gateway — прокси не смог получить корректный ответ от приложения.
- 503 Service Unavailable — сервер осознанно недоступен (профилактика, перегрузка, режим обслуживания).
- 504 Gateway Timeout — прокси дождался ответа дольше установленного таймаута, но так его и не получил. 504 — «частный случай» проблем, вызывающих 502, когда внутренний сервер висит, а не отваливается.
¶Диагностика
При появлении 502 первым делом проверяется доступность backend-процесса: systemctl status php-fpm, systemctl status nginx, просмотр логов приложения. В логах nginx (/var/log/nginx/error.log) ошибка 502 обычно выглядит как connect() failed (111: Connection refused) или upstream prematurely closed connection. Первая ошибка указывает на недоступность процесса, вторая — на его аварийное завершение во время ответа.
Далее проверяются:
- Порт backend-сервера:
ss -ltnp | grep 8080— слушает ли процесс нужный порт. - Логи приложения: PHP-FPM (
/var/log/php-fpm/), Node.js, Django, Laravel. - Ресурсы:
free -h,df -h,top— не исчерпана ли память или диск. - Конфигурация прокси: правильность директив
proxy_pass,fastcgi_pass,upstream. - TLS-сертификаты:
openssl s_clientдля проверки цепочки сертификатов между прокси и backend.
¶Устранение
Типовые действия: перезапуск упавшего сервиса (systemctl restart php-fpm), увеличение таймаутов (proxy_read_timeout 120s; в nginx), исправление конфигурации прокси, освобождение памяти, обновление TLS-сертификатов, настройка мониторинга и авторестарта процессов (systemd Restart=always, supervisor, pm2).
¶Смежные понятия
В экосистеме веб-серверов аналогичную роль играют Apache с модулем mod_proxy, IIS с ARR (Application Request Routing), Envoy, Traefik. Все они формируют 502 при аналогичных условиях. Код 502 закреплён в RFC 7231 (раздел 6.6.3) и не имеет официальных подтипов: клиент видит только строку 502 Bad Gateway без деталей причины — детали доступны только в логах сервера.
¶Интересные факты
- 502 Bad Gateway стал мемом в IT-сообществе: страница ошибки nginx с центрированным заголовком узнаваема настолько, что появляются её пародии и стикеры.
- Крупные инциденты с 502 затрагивают тысячи сайтов одновременно: в 2017 году сбой Cloudflare вызвал массовые 502 и 503 на десятках тысяч ресурсов, использующих его CDN.
- Код 502 не содержит информации о внутренней архитектуре сервера, поэтому его безопасно отдавать наружу.
Источники:
- RFC 7231 — Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
- Документация nginx: Module ngx_http_proxy_module
- Документация HAProxy: HTTP Errors
- MDN Web Docs: HTTP response status codes
