Краткий ответ: 504 означает, что бэкенд жив, но слишком медленный — не ответил в пределах таймаута прокси. Найдите, что именно тормозит (обычно запрос к базе, обращение к внешнему API или исчерпанный пул PHP-FPM), прежде чем поднимать таймауты; более длинные таймауты прячут болезнь, а не лечат её.

Обзор

504 — это сбой производительности, а не отказ. Что-то в цепочке запроса длится дольше, чем прокси готов ждать. Задача — найти медленный слой: код приложения, база, внешний сервис или дефицит ресурсов.

Что нужно иметь

  • Доступ по SSH; возможность воспроизвести медленный запрос (конкретный URL очень помогает).

Пошаговая инструкция

  1. Измерьте, куда уходит время:
    curl -o /dev/null -s -w 'ttfb: %{time_starttransfer}s total: %{time_total}s\n' https://yourdomain.com/slow-page
  2. Сначала проверьте дефицит ресурсов — насыщенный CPU или сервер в swap замедляют всё: см. быструю диагностику CPU и RAM.
  3. Включите и читайте лог медленных запросов MySQL:
    mysql -e "SET GLOBAL slow_query_log=1; SET GLOBAL long_query_time=2;"
    sudo tail -f /var/lib/mysql/*slow*.log
    Отсутствующие индексы на больших таблицах — причина №1 для 504.
  4. Поищите внешние вызовы: приложения, ждущие сторонние API (оплата, почта, фиды), таймаутятся без вины сервера — добавьте кэширование/таймауты в приложении.
  5. Только когда причина известна, выровняйте таймауты, если это действительно нужно (nginx fastcgi_read_timeout, PHP max_execution_time), для конкретных тяжёлых точек вроде импортов.

Типичные проблемы

  • Медленны только страницы админки/отчётов: тяжёлые запросы — индексируйте или разбивайте на страницы, а не поднимайте глобальные таймауты.
  • 504 во время бэкапов/крона: конкуренция за I/O в фиксированное время — перенесите задачи.
  • Исчерпанный пул FPM: запросы стоят за зависшими воркерами; ротируйте воркеры и найдите, что их заклинивает.

Когда обращаться в поддержку

Если замеры показывают, что сам сервер в норме, а медленный сетевой путь, или производительность резко деградировала без изменений с вашей стороны, — откройте тикет с таймингами curl -w и затронутыми URL.

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

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

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

Как найти запросы к базе, вызывающие таймауты?

Включите лог медленных запросов MySQL с порогом в одну-две секунды, воспроизведите медленную страницу и прочитайте записанные запросы. Самая частая находка — нет индексов на больших таблицах.

Похожие статьи

Нужна помощь? Связаться с поддержкой Cloud2Y →

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)