Что такое HTTP-статус 504 (Gateway Timeout)?

«Что такое HTTP-статус 504 (Gateway Timeout)?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Код состояния 504 Gateway Timeout означает, что сервер, выступающий в роли шлюза или прокси (например, Nginx, API-гейтвей), не дождался ответа от вышестоящего сервера (upstream/backend) в отведенное время.

Основная причина: Таймаут соединения между прокси и бэкенд-сервисом.

Типичные сценарии:

  • Бэкенд-приложение "зависло" на долгой операции (тяжелый запрос к БД, вычисления).
  • Бэкенд-сервер перегружен и не успевает обработать запрос.
  • Проблемы в сети между прокси и бэкендом.
  • Значение proxy_read_timeout (или аналог) в конфигурации прокси установлено слишком низким.

Пример настройки таймаута в Nginx:

location /api/ {
    proxy_pass http://backend_service;
    proxy_connect_timeout 5s;    # Таймаут на установку соединения
    proxy_read_timeout 30s;      # Таймаут на чтение ответа от бэкенда
    proxy_send_timeout 30s;      # Таймаут на отправку запроса бэкенду
}

Диагностика:

  1. Проверить логи прокси-сервера (Nginx/Apache) на наличие upstream timed out.
  2. Проверить логи и метрики бэкенд-сервиса на предмет медленных операций или высокой нагрузки.
  3. Проанализировать производительность запросов к базе данных или внешним API.
  4. Увеличить proxy_read_timeout, если операция действительно требует больше времени (но лучше оптимизировать сам запрос).