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 требует исправления на стороне сервиса.
Что делать владельцу
- Посмотреть error log.
- Определить upstream.
- Измерить его время ответа.
- Проверить нагрузку.
- Проверить базу.
- Проверить внешние зависимости.
- Только после этого пересматривать timeout.
Как NexIP помогает
Проверка снаружи подтверждает, действительно ли публичный endpoint возвращает 504 и сколько времени проходит до ошибки.
FAQ
504 — это интернет у пользователя?
Обычно нет. Код сформировал gateway/proxy на серверной стороне.
Можно исправить перезагрузкой браузера?
Если проблема была кратковременной — следующий запрос может пройти. Но постоянную причину это не исправляет.
Нужно увеличить proxy_read_timeout?
Иногда да, но только если длительное выполнение ожидаемо. Сначала выясните, почему backend отвечает так долго.
По теме: Ошибка 502 Bad Gateway: что означает и как найти причину.
Диагностика NexIP
Продолжите реальной проверкой
Откройте полный раздел диагностики и проверьте сайт, домен или сетевые параметры.
Читайте дальше
Материалы по теме
Что показывают HTTP-заголовки
Полное руководство по HTTP-заголовкам: request и response headers, кеш, redirects, cookies, CORS, security headers, CDN и диагностика через curl и NexIP.
ЧитатьКак проверить доступность сайта
Пошаговая диагностика недоступного сайта: домен, DNS, IP, маршрут, TCP, TLS, HTTP-коды, curl, IPv4/IPv6, CDN и проверка через NexIP.
ЧитатьHTTP-коды ответа: что означают 200, 301, 404, 500 и другие
Когда браузер открывает страницу, сервер отвечает не только HTML-кодом. Вместе с ответом он отправляет числовой HTTP-статус: 200, 301, 404, 500 и так далее. Эти три цифры часто позволяют понять проблему быстрее, чем длинное сообщение…
ЧитатьКак открывается сайт: DNS → TCP → TLS → HTTP
Когда человек вводит адрес сайта и нажимает Enter, кажется, будто браузер просто «подключился к сайту». На самом деле за доли секунды происходит целая цепочка: DNS, соединение с сервером, TLS и только потом HTTP. Если понимать эту…
Читать