Перейти к содержимому

Ошибка 504 Gateway Timeout: почему возникает

504 Gateway Timeout означает: сервер-посредник отправил запрос дальше, но не дождался ответа вовремя. Поэтому 504 часто появляется не тогда, когда «сервер совсем умер», а когда какая-то внутренняя операция работает слишком долго. Простая…

504 Gateway Timeout означает: сервер-посредник отправил запрос дальше, но не дождался ответа вовремя.

Поэтому 504 часто появляется не тогда, когда «сервер совсем умер», а когда какая-то внутренняя операция работает слишком долго.

Простая схема

Браузер
↓
nginx / CDN / proxy
↓
backend
↓
долгая операция
↓
TIMEOUT

Чем 504 отличается от 502

Упрощённо:

  • 502 — upstream дал неправильный ответ или соединение с ним не получилось нормально;
  • 504 — ожидание upstream заняло слишком много времени.

Пример

Пользователь запускает тяжёлый отчёт.

PHP начинает большой SQL-запрос. База отвечает 90 секунд, а nginx готов ждать только 60.

В итоге пользователь получает 504.

Медленная база данных

Одна из самых частых причин.

Проблемы могут быть в:

  • отсутствующем индексе;
  • тяжёлом JOIN;
  • блокировке;
  • перегруженном сервере;
  • слишком большом объёме данных.

Внешний API тормозит

Приложение может само работать быстро, но ждать сторонний сервис.

NexIP backend
↓
внешний API
↓
долгое ожидание

DNS внутри backend

Иногда приложение обращается к другому hostname и само долго ждёт DNS или сетевое соединение.

Перегрузка

CPU занят, память закончилась, очередь запросов растёт — приложение перестаёт отвечать вовремя.

Слишком маленький timeout

Иногда система объективно выполняет нормальную операцию 70 секунд, а proxy настроен ждать только 60.

Но просто увеличить timeout — не всегда правильное решение.

Почему нельзя бесконечно увеличивать timeout

Если запрос занимает пять минут из-за плохого SQL, значение 600 секунд лишь скрывает проблему и позволяет тяжёлым запросам дольше занимать ресурсы.

Сначала найдите медленный участок

Полезно измерить:

  • время самого приложения;
  • SQL;
  • внешние API;
  • DNS;
  • соединения;
  • очереди.

Посмотрите журнал nginx

tail -n 100 /var/log/nginx/error.log

Фраза вроде:

upstream timed out

очень хорошо указывает направление поиска.

Проверка backend напрямую

Если архитектура позволяет, запросите внутренний сервис без внешнего proxy и сравните время.

curl и время ответа

curl -s -o /dev/null \
-w "connect=%{time_connect} total=%{time_total}\n" \
https://example.com/

504 от CDN

CDN тоже может слишком долго ждать origin.

Тогда проблема часто не в самом CDN, а в origin-сервере или сети между ними.

Что делать посетителю

Если это чужой сайт, можно повторить запрос позднее. Но систематическая 504 требует исправления на стороне сервиса.

Что делать владельцу

  1. Посмотреть error log.
  2. Определить upstream.
  3. Измерить его время ответа.
  4. Проверить нагрузку.
  5. Проверить базу.
  6. Проверить внешние зависимости.
  7. Только после этого пересматривать timeout.

Как NexIP помогает

Проверка снаружи подтверждает, действительно ли публичный endpoint возвращает 504 и сколько времени проходит до ошибки.

FAQ

504 — это интернет у пользователя?

Обычно нет. Код сформировал gateway/proxy на серверной стороне.

Можно исправить перезагрузкой браузера?

Если проблема была кратковременной — следующий запрос может пройти. Но постоянную причину это не исправляет.

Нужно увеличить proxy_read_timeout?

Иногда да, но только если длительное выполнение ожидаемо. Сначала выясните, почему backend отвечает так долго.

По теме: Ошибка 502 Bad Gateway: что означает и как найти причину.

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

Продолжите реальной проверкой

Откройте полный раздел диагностики и проверьте сайт, домен или сетевые параметры.

Открыть диагностику

Читайте дальше

Материалы по теме

HTTP и сайты

HTTP-коды ответа: что означают 200, 301, 404, 500 и другие

Когда браузер открывает страницу, сервер отвечает не только HTML-кодом. Вместе с ответом он отправляет числовой HTTP-статус: 200, 301, 404, 500 и так далее. Эти три цифры часто позволяют понять проблему быстрее, чем длинное сообщение…

Читать
HTTP и сайты

Как открывается сайт: DNS → TCP → TLS → HTTP

Когда человек вводит адрес сайта и нажимает Enter, кажется, будто браузер просто «подключился к сайту». На самом деле за доли секунды происходит целая цепочка: DNS, соединение с сервером, TLS и только потом HTTP. Если понимать эту…

Читать
Вернуться в базу знаний