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

Страница долго грузится, а потом вместо неё — «504 Gateway Timeout». Сайт не упал: он просто не успел ответить за отведённое время. Разбираемся, где обычно теряются секунды, как это измерить и что исправить, чтобы ошибка не вернулась в следующий пик нагрузки.

504Gateway Timeout60 с

Что означает ошибка 504

Как и в случае с ошибкой 502, запрос посетителя сначала принимает веб-сервер или прокси (nginx, Cloudflare), а страницу собирает движок сайта — PHP, приложение, база данных. Код 504 Gateway Timeout означает: веб-сервер передал запрос движку и ждал ответа дольше, чем разрешено, — и сдался.

Отличие от соседних ошибок:

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

Обычный предел ожидания у nginx — 60 секунд. У Cloudflare свой предел и своя ошибка тайм-аута — 524: если вы видите 524 на странице Cloudflare, причина та же, что у 504.

Почему сайт не успевает ответить

ПричинаГде проявляется
Медленные запросы к базе данных: нет индексов, огромные таблицы, блокировкикаталог с фильтрами, поиск, отчёты в админке
Тяжёлая операция прямо во время запроса: импорт, выгрузка, генерация файловкнопки «выгрузить», обмен с 1С, загрузка прайса
Ожидание внешнего сервиса: оплата, CRM, доставка, курс валютоформление заказа, отправка формы, расчёт доставки
Нехватка ресурсов: процессор загружен, мало памяти, медленный дисквсе страницы сразу, особенно в пиковые часы
Ботов больше, чем посетителейволнами, без связи с рекламой и рассылками

Сначала измерьте, где теряются секунды

Ответ сайта складывается из нескольких этапов: поиск адреса (DNS), подключение к серверу, установка защищённого соединения (TLS), ожидание первого байта ответа и загрузка страницы. Ошибка 504 почти всегда сидит в одном этапе — ожидании ответа сервера: соединение установилось быстро, а дальше сервер молчит.

Проверка скорости ответа показывает время каждого этапа отдельно. Если подключение и TLS занимают десятки миллисекунд, а ожидание ответа — секунды, проблема внутри сайта: в коде, базе данных или внешнем сервисе, а не в сети и не в хостинге.

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

  1. Определите, где именно 504: на всех страницах или на конкретных — каталоге, корзине, поиске, кнопке выгрузки. Это главная подсказка для разработчика.
  2. Отметьте время. Ошибка в пиковые часы — дело в нагрузке; в одно и то же время ночью — в фоновой задаче вроде обмена с 1С или резервного копирования.
  3. Проверьте ответ сервера по этапам и приложите результат к обращению.
  4. Передайте разработчику адреса страниц, время и что делали на сайте в этот момент.

Что проверить разработчику

  • Журнал медленных запросов базы данных — самая частая находка: запрос без индекса по большой таблице.
  • Журнал веб-сервера — строки upstream timed out покажут, какие адреса не уложились в время.
  • Внешние вызовы — у запросов к платёжным системам, CRM и службам доставки должен быть короткий собственный тайм-аут, чтобы зависший сервис не держал всю страницу.
  • Тяжёлые операции — импорт, выгрузку и рассылку переносите в фоновые задачи (cron, очереди), а посетителю сразу отвечайте «задача поставлена».
  • Кэширование страниц и результатов тяжёлых запросов.

Про увеличение тайм-аута. Поднять proxy_read_timeout или fastcgi_read_timeout с 60 до 300 секунд — временная мера: ошибка исчезнет, но посетитель так и будет ждать минуты, а сервер — держать занятые процессы. Это способ дотянуть до исправления, а не само исправление.

Фоновые задачи: тоже источник 504

Когда тяжёлую работу выносят в cron, появляется новый риск: задача тихо перестаёт выполняться, и об этом никто не знает, пока не всплывут последствия — например, остатки не обновились неделю. В SiteFalcon есть мониторинг фоновых задач: задача отмечается по ссылке после каждого запуска, и если отметки нет вовремя — приходит уведомление.

Как узнавать о 504 сразу

Мониторинг доступности SiteFalcon проверяет сайт каждую минуту с нескольких серверов в Санкт-Петербурге и Москве и замеряет каждый этап ответа: на графике видно, как растёт время ожидания ответа сервера ещё до того, как сайт начнёт отдавать 504. Если сайт не ответил две проверки подряд, приходит сообщение в Telegram и на почту с кодом ошибки и причиной, а после восстановления — сообщение со временем простоя.

Подробнее — на странице мониторинг доступности сайта. Уведомления есть на тарифах от 290 ₽ в месяц, первые 3 дня — бесплатно.

Частые вопросы

Чем ошибка 504 отличается от 502?

При 502 движок сайта ответил ошибкой или оборвал соединение — чаще всего он упал. При 504 движок, скорее всего, работает, но не успевает ответить за отведённое время. Поэтому 502 лечат перезапуском и поиском сбоя, а 504 — поиском медленного места.

Можно ли просто увеличить тайм-аут?

Как временную меру — да: ошибка пропадёт. Но посетитель будет ждать страницу минутами, а сервер — держать занятые процессы, и в пик нагрузки сайт может перестать отвечать совсем. Надёжнее найти медленный запрос или вынести тяжёлую работу в фон.

Почему 504 только на некоторых страницах?

Потому что медленно работает конкретная операция: фильтр каталога, поиск, корзина с расчётом доставки, выгрузка. Список таких страниц и время ошибки — лучшая подсказка разработчику.

Что значит ошибка 524 на странице Cloudflare?

Это тайм-аут Cloudflare: он подключился к вашему серверу, но не дождался ответа за отведённое время. Причины те же, что у 504, — медленный код, база данных или внешний сервис.

Мониторинг сайтов 24/7Доступность, SSL, домен, DNS, формы, безопасность и отчёт клиенту. Уведомления в Telegram — от 290 ₽ в месяц.
Начать бесплатно