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