Ошибка 504 Gateway Timeout: где искать задержку
Прокси не дождался ответа. Выясняем, какой запрос задерживается и почему увеличение тайм-аута не всегда помогает.
Содержание
504 возникает, когда сервер-шлюз не получил своевременный ответ от вышестоящего сервера. В отличие от502, проблема обычно связана с ожиданием. Сам код не показывает, где задержка: в PHP, базе, внешнем API или сети.
Найдите медленный сценарий
Проверьте, относится ли ошибка ко всем страницам или к отдельной операции: импорту, поиску, оплате. Запишите длительность ожидания и время. Не повторяйте много раз тяжёлый запрос — очередь может стать ещё длиннее.
Сопоставьте журналы
- Посмотрите сообщение прокси и адрес вышестоящего сервиса.
- Сравните журнал приложения и базы за тот же период.
- Проверьте внешние HTTP-запросы, блокировки и фоновые задачи.
- Сравните CPU, память и число занятых обработчиков.
На виртуальном хостинге часть информации доступна только поддержке. Передайте точный URL, действие и время, попросите определить слой, в котором истёк тайм-аут.
Исправьте причину ожидания
Долгую фоновую операцию иногда нужно разделить на части или перенести в очередь. Медленный запрос к базе требует анализа запроса и индексов, а внешний сервис — разумных ограничений ожидания и обработки ошибки. Это разные задачи, и универсального числа секунд для всех сайтов нет.
Когда менять тайм-аут
Увеличение допустимо для осознанно долгой операции при достаточных ресурсах и контроле последствий. Если каждый посетитель удерживает процесс дольше, сервер способен обслужить меньше одновременных запросов. После изменения проверьте не только исчезновение504, но и длительность ответа и очередь.
Для действий с заказами выясните, завершилась ли операция на сервере после тайм-аута браузера. Повторная отправка без проверки может создать дубликаты. После исправления используйте безопасный тестовый сценарий.
Комментарии 0