Коротка відповідь: 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 →
