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?

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