Ошибка 504 Gateway Timeout: почему сайт не успевает ответить
Страница долго грузится, а потом вместо неё — «504 Gateway Timeout». Сайт не упал: он просто не успел ответить за отведённое время. Разбираемся, где обычно теряются секунды, как это измерить и что исправить, чтобы ошибка не вернулась в следующий пик нагрузки.
Что означает ошибка 504
Как и в случае с ошибкой 502, запрос посетителя сначала принимает веб-сервер или прокси (nginx, Cloudflare), а страницу собирает движок сайта — PHP, приложение, база данных. Код 504 Gateway Timeout означает: веб-сервер передал запрос движку и ждал ответа дольше, чем разрешено, — и сдался.
Отличие от соседних ошибок:
- 502 — движок ответил ошибкой или оборвал соединение;
- 503 — сервер сам отказывается обслуживать запросы: перегрузка, работы, лимиты;
- 504 — движок, скорее всего, работает, но слишком медленно.
Обычный предел ожидания у nginx — 60 секунд. У Cloudflare свой предел и своя ошибка тайм-аута — 524: если вы видите 524 на странице Cloudflare, причина та же, что у 504.
Почему сайт не успевает ответить
| Причина | Где проявляется |
|---|---|
| Медленные запросы к базе данных: нет индексов, огромные таблицы, блокировки | каталог с фильтрами, поиск, отчёты в админке |
| Тяжёлая операция прямо во время запроса: импорт, выгрузка, генерация файлов | кнопки «выгрузить», обмен с 1С, загрузка прайса |
| Ожидание внешнего сервиса: оплата, CRM, доставка, курс валют | оформление заказа, отправка формы, расчёт доставки |
| Нехватка ресурсов: процессор загружен, мало памяти, медленный диск | все страницы сразу, особенно в пиковые часы |
| Ботов больше, чем посетителей | волнами, без связи с рекламой и рассылками |
Сначала измерьте, где теряются секунды
Ответ сайта складывается из нескольких этапов: поиск адреса (DNS), подключение к серверу, установка защищённого соединения (TLS), ожидание первого байта ответа и загрузка страницы. Ошибка 504 почти всегда сидит в одном этапе — ожидании ответа сервера: соединение установилось быстро, а дальше сервер молчит.
Проверка скорости ответа показывает время каждого этапа отдельно. Если подключение и TLS занимают десятки миллисекунд, а ожидание ответа — секунды, проблема внутри сайта: в коде, базе данных или внешнем сервисе, а не в сети и не в хостинге.
Что делать владельцу сайта
- Определите, где именно 504: на всех страницах или на конкретных — каталоге, корзине, поиске, кнопке выгрузки. Это главная подсказка для разработчика.
- Отметьте время. Ошибка в пиковые часы — дело в нагрузке; в одно и то же время ночью — в фоновой задаче вроде обмена с 1С или резервного копирования.
- Проверьте ответ сервера по этапам и приложите результат к обращению.
- Передайте разработчику адреса страниц, время и что делали на сайте в этот момент.
Что проверить разработчику
- Журнал медленных запросов базы данных — самая частая находка: запрос без индекса по большой таблице.
- Журнал веб-сервера — строки
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, — медленный код, база данных или внешний сервис.