Коротко. 504 Gateway Timeout означает, что шлюз или прокси не дождался ответа от следующего сервера за отведённое время. Пользователь видит ошибку, а причина может быть в базе, приложении, PHP-FPM, nginx, CDN или внешнем сервисе.
Как читать материал. В каждом разделе два пути: сделать руками и инструментами или подключить нейросеть, которая ускоряет разбор. Третий пункт: проверка. Нейросеть не видит сервер и не измеряет время ответа, поэтому результат проверяем инструментами.
Что означает ошибка 504
504 относится к классу 5xx. Запрос дошёл до шлюза, но ответ от бэкенда не пришёл вовремя. Шлюз перестал ждать и вернул ошибку.
Это не то же самое, что «сайт недоступен». Сервер может быть жив, но конкретный запрос завис: тяжёлая страница, медленная база, внешний API, долгий расчёт. Поэтому увеличить таймаут без диагностики значит просто дольше ждать ту же проблему.
Поисковые системы считают 5xx временной ошибкой и повторяют запрос. Если 504 держится долго, обход замедляется, а страницы могут перестать обновляться в индексе. Возвращать 200 с текстом ошибки нельзя.
504, 500, 502 и 503: в чём разница
| Код | Кто отвечает | Что означает | Что проверить |
|---|---|---|---|
| 500 | Приложение или сайт | Внутренняя ошибка | Логи приложения и веб-сервера |
| 502 | Шлюз или прокси | Не получил корректный ответ от бэкенда | Бэкенд, PHP-FPM, nginx, CDN |
| 503 | Сервер | Временно недоступен или перегружен | Нагрузку, лимиты, обслуживание |
| 504 | Шлюз или прокси | Не дождался ответа | Таймауты, медленные запросы, базу |
502 и 504 легко перепутать. 502 означает, что ответ был некорректным или соединение не состоялось. 504 означает, что ответа не дождались. В логах это разные строки.
Классический путь. Проверьте статус и время ответа.
curl -I https://example.com/
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" https://example.com/
С нейросетью. Опишите симптом и попросите разложить цепочку таймаутов.
Сайт отдаёт 504 на странице каталога. Остальные страницы открываются.
Помоги составить план: где мог зависнуть запрос и какие таймауты проверить.
Не предлагай сразу увеличивать все лимиты.
Проверка. Сравните время ответа на проблемной и соседней странице. Если разница кратная, ищите конкретный запрос, а не общий лимит.
Где зависает запрос
Цепочка обычно выглядит так:
браузер → CDN или прокси → nginx → PHP-FPM / приложение → база
Таймаут может сработать на любом участке:
- CDN не дождался origin;
- nginx не дождался PHP-FPM или приложения;
- PHP упёрся в
max_execution_time; - приложение ждёт внешний API;
- база выполняет тяжёлый запрос;
- сервер не хватает памяти или CPU.
Один и тот же запрос может проходить через несколько таймаутов. Важно найти первый участок, который перестал отвечать.
Как найти причину
1. Зафиксируйте масштаб
Проверьте:
- 504 на одной странице или на всём сайте;
- у всех пользователей или только у вас;
- постоянно или периодически;
- что было до ошибки: деплой, рост трафика, обновление, смена CDN.
Сохраните URL, время и код ответа. Если ошибка повторяется, запишите, сколько примерно ждёт браузер до 504.
curl.2. Найдите зависший запрос
- Смотрите логи nginx:
upstream timed out,recv() failed,no live upstreams. - Смотрите логи PHP:
Maximum execution time exceeded. - Смотрите медленные запросы базы.
- Сравните проблемную страницу с соседней.
- Проверьте, не ждёт ли приложение внешний API.
Если 504 только на одной странице, вероятнее всего, проблема в конкретном запросе или сценарии, а не в сервере целиком.
3. Проверьте таймауты по слоям
- CDN: свой лимит ожидания origin.
- nginx:
proxy_read_timeout,fastcgi_read_timeout,proxy_connect_timeout. - PHP:
max_execution_time. - База:
wait_timeout, лимиты запросов. - Внешний API: таймаут клиента и повторные попытки.
Не меняйте все лимиты сразу. Сначала найдите, какой именно слой первым перестал ждать.
Классический путь. Посмотрите ошибки nginx и PHP.
tail -n 100 /var/log/nginx/error.log
grep -i "timed out\|504\|upstream" /var/log/nginx/error.log | tail -n 50
С нейросетью. Передайте очищенный фрагмент лога.
Вот фрагмент лога с ошибкой 504. Определи, на каком слое сработал таймаут,
и предложи три проверки. Не придумывай строки, которых нет.
Я удалил IP и токены.
Проверка. Подтвердите гипотезу логом, профилем запроса или тестом на staging.
4. Проверьте последние изменения
504 часто появляется после деплоя, обновления базы, смены CDN, роста трафика или подключения нового внешнего сервиса. Откатывайте по одному изменению и после каждого шага проверяйте время ответа.
5. Найдите медленный участок
- Профилировщик приложения.
- Логи медленных запросов базы.
- APM или встроенные метрики хостинга.
- Тест на staging с тем же сценарием.
- Сравнение с соседней страницей, которая работает.
Если запрос стал медленным после изменения кода, ищите в первую очередь этот участок. Если после роста данных, смотрите индексы и запросы. Если после внешнего API, смотрите таймаут и повторные попытки.
Разбор проекта
Проверим сайт за вас
Посмотрим ошибки, таймауты и логи, скажем, что исправлять первым. 20–30 минут в Zoom, Telegram или по телефону. Бесплатно.
Разобрать проектКак исправить по причинам
| Причина | Что делать | Проверка |
|---|---|---|
| Медленный запрос к базе | Индекс, оптимизация, кеш | Время запроса снизилось |
| Тяжёлый сценарий в коде | Профилирование и оптимизация | Страница отвечает без 504 |
| Мало памяти или CPU | Проверить ресурсы и лимиты | Нагрузка в норме |
| Короткий таймаут nginx | Поднять после диагностики | Нет upstream timed out |
| Долгий внешний API | Таймаут, кеш, резервный сценарий | Сайт не ждёт API бесконечно |
| CDN не дождался origin | Проверить origin и лимит CDN | CDN получает ответ вовремя |
| Блокирующий цикл | Исправить код | Запрос завершается |
| Перегрузка | Кеш, очередь, ресурсы | Время ответа стабильно |
Увеличение таймаута помогает, только если запрос почти успевает. Если он завис навсегда, вы просто дольше ждёте ошибку.
Почему увеличение таймаута не лечение
Таймаут — это предохранитель. Он говорит: «мы ждали слишком долго». Если поднять лимит, пользователь будет ждать дольше, а нагрузка на сервер вырастет: зависшие запросы займут процессы и соединения.
Сначала найдите причину: медленный запрос, внешний API, нехватку ресурсов или ошибку в коде. Потом решайте, нужен ли новый лимит. Если сайт в целом медленный, начните с гайда по скорости.
Что отправить хостингу
- Приложите URL и время с часовым поясом.
- Укажите код ответа и время ожидания.
- Добавьте фрагмент лога nginx или PHP без паролей и токенов.
- Опишите, на каких страницах ошибка.
- Перечислите изменения за последние сутки.
- Уточните, есть ли CDN, WAF или внешний API.
- Напишите, воспроизводится ли ошибка на всех устройствах.
Частые ошибки
- Сразу поднимать все таймауты.
- Искать 504 только в браузере.
- Путать 504 с 502.
- Оптимизировать картинки при медленном запросе к базе.
- Не смотреть логи.
- Игнорировать периодические таймауты.
- Возвращать 200 вместо 504.
- Верить ответу нейросети без проверки.
Вопросы
504 — ошибка сервера или сайта?
Формально это ошибка шлюза. Причина может быть в приложении, базе, PHP-FPM, nginx, CDN или внешнем сервисе.
Влияет ли 504 на SEO?
Кратковременная ошибка обычно не влияет: поиск повторяет запрос. Если 504 держится долго, обход замедляется, а страницы могут перестать обновляться в индексе.
Чем 504 отличается от 502?
502 означает, что ответ от бэкенда был некорректным или соединение не состоялось. 504 означает, что ответа не дождались за отведённое время.
Нужно ли увеличивать таймаут?
Только после диагностики. Если запрос почти успевает, лимит можно поднять. Если он завис, увеличение лишь удлинит ожидание.
Почему 504 появляется только на одной странице?
Чаще всего это тяжёлый запрос, медленная база, внешний API или конкретный сценарий в коде. Сравните страницу с соседней и посмотрите логи.
Может ли нейросеть исправить 504?
Нет. Она помогает разобрать логи и составить план проверки. Причину подтверждают инструментами и тестами.
Источники
Официальные документы 9
- MDN: 504 Gateway Timeoutdeveloper.mozilla.org
- RFC 9110, раздел 15.6.5rfc-editor.org
- MDN: 502 Bad Gatewaydeveloper.mozilla.org
- MDN: 503 Service Unavailabledeveloper.mozilla.org
- nginx: proxy_read_timeoutnginx.org
- nginx: fastcgi_read_timeoutnginx.org
- PHP: max_execution_timephp.net
- Cloudflare: 504 Gateway Timeoutdevelopers.cloudflare.com
- Google Search Central: HTTP status codesdevelopers.google.com