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