HTTP 504 Gateway Timeout
Посредник перестал ждать: вышестоящий сервер не ответил в течение времени ожидания прокси.
Что означает HTTP 504
HTTP 504 Gateway Timeout выдаётся прокси, балансировщиком нагрузки или CDN, чей запрос к вышестоящему серверу не получил ответа в течение установленного времени ожидания. В отличие от 502 — где вышестоящий сервер ответил некорректно, — при 504 он вообще не ответил вовремя.
Первопричина почти всегда — что-то медленное за кулисами: затратный запрос к базе данных, не отвечающий внешний API или пул потоков приложения, истощённый нагрузкой.
Частые причины ошибок 504
- Медленный запрос к базе данных или отсутствующий индекс, из-за которого один эндпоинт работает дольше, чем допускает прокси.
- Приложение ожидает внешний API, который сам работает медленно или недоступен.
- Бэкенд перегружен: все воркеры заняты, запросы стоят в очереди дольше таймаута.
- Сетевые проблемы между прокси и вышестоящим сервером (маршрутизация, потеря пакетов, DNS).
- Несовпадение таймаутов: приложению законно нужно 60 секунд, а прокси обрывает соединение через 30.
Как исправить со стороны посетителя
- Повторите попытку через некоторое время — единичный 504 часто означает один медленный запрос, а не полный простой.
- Для отправленного вами действия (платёж, заказ) проверьте, действительно ли оно прошло, прежде чем повторять попытку.
Как исправить со стороны разработчика
- Найдите медленный эндпоинт в логах доступа/APM: исправьте запрос, добавьте индексы, кэшируйте результат.
- Перенесите медленные операции в фоновые задачи и быстро возвращайте статус, который клиент может опрашивать.
- Согласуйте бюджеты таймаутов сквозным образом (приложение < прокси < CDN), чтобы самое медленное звено было известно и предусмотрено.
- Добавьте предохранители (circuit breakers) вокруг ненадёжных внешних API, вместо того чтобы позволять им подвешивать ваши воркеры.
Пример ответа
HTTP/1.1 504 Gateway Timeout Server: nginx Content-Type: text/html <html><body><h1>504 Gateway Timeout</h1></body></html>
Частые вопросы
В чём разница между 504 и 502?
504 означает, что вышестоящий сервер вообще не ответил в течение таймаута; 502 означает, что он ответил чем-то некорректным.
Является ли 504 проблемой соединения пользователя?
Нет — проблема между прокси сайта и его бэкендом. С сетью пользователя всё в порядке.
Был ли обработан мой отправленный запрос, если я получил 504?
Возможно, да — таймаут затронул ответ, но не обязательно саму обработку. Прежде чем слепо повторять неидемпотентные действия, проверьте их состояние.