Błąd 504 Gateway Timeout oznacza jedno: serwer pośredniczący (Nginx, Cloudflare, load balancer) nie doczekał się odpowiedzi od aplikacji w zadanym czasie. W sklepie na PrestaShop lub WooCommerce to prawie zawsze objaw, a nie przyczyna — źródło siedzi w PHP, MySQL albo w zewnętrznym API. Poniżej przechodzimy przez diagnozę krok po kroku: od odróżnienia 504 od 502, 503 i 500, przez drzewko decyzyjne, aż po logi, które wskazują konkretny plik i konkretne zapytanie. Bez podnoszenia timeoutu do 300 sekund „na ślepo”, bo to maskuje problem, a nie go rozwiązuje.

Czym jest błąd 504 i czym różni się od 502, 503 i 500

HTTP 504 Gateway Timeout to kod z rodziny 5xx opisany w specyfikacji HTTP Semantics (RFC 9110). Definicja jest wąska: serwer pełniący rolę pośrednika przekazał żądanie dalej i nie doczekał się odpowiedzi w zadanym oknie czasowym. Ten kod nie mówi, czy padło PHP, czy MySQL mielił zapytanie 40 sekund — mówi wyłącznie „nie dostałem odpowiedzi na czas”.

W typowym stacku sklepu na PrestaShop lub WooCommerce gatewayem jest ten element, który stoi przed aplikacją: Nginx → PHP-FPM → MySQL, a przy włączonym CDN łańcuch wydłuża się do Cloudflare → Nginx → PHP-FPM → MySQL. Do tego dochodzą zewnętrzne API: bramka płatności, kurier, ERP, system faktur. Każde ogniwo ma własny timeout i każde może zwrócić 504 — dlatego pierwszy krok to ustalenie, kogo tak naprawdę nie doczekał się proxy.

KodKiedy zobaczysz ten kodGdzie szukać
504Proxy nie doczekał się odpowiedzi od upstreamu (PHP-FPM, Apache, API)nginx error.log, slow log PHP-FPM, slow query log MySQL
502Upstream odpowiedział, ale niepoprawnie — proces PHP-FPM padł lub nie przyjął połączenialog PHP-FPM, logi modułów PHP (np. fatal error), OOM killer
503Serwer działa, ale świadomie odmawia obsługi (restart, tryb konserwacji, limit workerów)konfiguracja Nginx, panel hostingu, harmonogram maintenance
500Aplikacja wykonała się i zwróciła błąd — składnia, wyjątek, brak uprawnieńlog błędów PHP, debug w PrestaShop, log WooCommerce

Pułapka: Cloudflare po przekroczeniu własnego limitu (100 sekund na niższych planach) zwraca kod 524, a nie 504. Dla użytkownika wygląda to identycznie — biała strona i „timeout”. Rozróżnienie jest proste: jeśli w nagłówkach odpowiedzi widzisz server: cloudflare, a w error.log Nginxa nie ma żadnego wpisu o tym żądaniu, problem leży między CDN a originem — origin nawet nie dostał ruchu. Zanim zaczniesz zmieniać konfigurację serwera, sprawdź to jedno.

KodKiedy zobaczysz ten kodGdzie szukać
504Proxy nie doczekał się odpowiedzi od upstreamu (PHP-FPM, Apache, API)nginx error.log, slow log PHP-FPM, slow query log MySQL
502Upstream odpowiedział niepoprawnie — proces PHP-FPM padł lub nie przyjął połączenialog PHP-FPM, logi modułów PHP, OOM killer
503Serwer działa, ale świadomie odmawia obsługi (restart, maintenance, limit workerów)konfiguracja Nginx, panel hostingu, harmonogram maintenance
500Aplikacja wykonała się i zwróciła błąd — wyjątek, składnia, brak uprawnieńlog błędów PHP, debug PrestaShop, log WooCommerce

Szybka diagnoza: hosting, sklep czy zewnętrzna integracja?

Cztery testy, każdy po 2–3 minuty. Wykonaj je po kolei i zapisz wyniki — to skróci rozmowę z hostingiem z trzech dni do jednej wiadomości.

  1. Zakres błędu. Sprawdź osobnymi wejściami: stronę główną, /admin (panel PrestaShop lub /wp-admin), /koszyk i /kasa oraz jedną akcję zapisu (np. dodanie produktu w panelu). Jeśli 504 leci tylko przy kasie — szukaj w koszyku i sesjach. Jeśli tylko w /admin przy zapisie produktu — szukaj w module, który ten zapis obsługuje.
  2. Izolacja proxy i cache. Otwórz ten sam URL w oknie incognito, na innym łączu (LTE z telefonu) i po wyłączeniu CDN (np. na czas testu wyłącz pomarańczową chmurkę w Cloudflare). Jeśli po LTE jest szybko, a w firmie wolno — to problem sieci lub cache przeglądarki. Jeśli po wyłączeniu CDN błąd znika, wina leży po stronie proxy/CDN, nie aplikacji.
  3. Korelacja czasowa. Zapytaj siebie i zespół: co działo się w ostatnich 72 godzinach? Wdrożenie na produkcję, nowy moduł, aktualizacja WooCommerce lub PrestaShop, włączenie nowej integracji (płatności, kurier, ERP, newsletter). 504 niemal nigdy nie pojawia się „z niczego” — pojawia się razem ze zmianą.
  4. Pomiar czasu. Uruchom z terminala: curl -s -o /dev/null -w "dns:%{time_namelookup} connect:%{time_connect} ttfb:%{time_starttransfer} total:%{time_total}\n" https://twojadomena.pl/koszyk. Zobaczysz, po ilu sekundach serwer odpuszcza. Jeśli total wynosi dokładnie 60,0 s — to limit konfiguracji, nie wolne zapytanie. Jeśli 12,4 s przy ttfb 12,2 s — wąskim gardłem jest aplikacja.

Wniosek jest dwuwartościowy. 504 globalny, na wszystkich podstronach, także w /admin — problem po stronie serwera lub upstreamu (PHP-FPM, MySQL, throttling hostingu). 504 punktowy, dotyczący jednego URL-a lub jednej akcji — problem w skrypcie, module albo zewnętrznym API, które nie odpowiada w rozsądnym czasie.

Jak w 10 minut ustalić źródło błędu — logi, które naprawdę coś mówią

1. Nginx error.log. Zaczynasz od: grep -i "upstream timed out" /var/log/nginx/error.log | tail -50, a potem grep -i "while reading response header from upstream" /var/log/nginx/error.log. Pierwszy wpis pokazuje, który upstream nie odpowiedział (php-fpm czy zewnętrzne API) i jaki URL był obsługiwany. To najszybsza informacja, jaką w ogóle dostaniesz.

2. Slow log PHP-FPM. W konfiguracji pool (zwykle /etc/php/*/fpm/pool.d/www.conf) ustaw na czas diagnozy request_slowlog_timeout = 5s oraz slowlog = /var/log/php-fpm/slow.log. Plik slow log zawiera stack trace: konkretny plik i konkretną funkcję, która przekroczyła limit. Nie zgadujesz już, czy winny jest moduł płatności, czy eksport zamówień — widzisz to wprost.

3. Slow query log MySQL. Włącz slow_query_log, ustaw long_query_time = 2. Zapytania analizuj przez mysqldumpslow -s t albo pt-query-digest, a najlepiej powtarzające się zapytanie obejrzyj przez EXPLAIN. 504 w koszyku i na stronie zamówienia to bardzo często brak indeksu: w PrestaShop na tabeli koszyka, w WooCommerce na wp_woocommerce_sessions, która rośnie do setek megabajtów.

4. Metryki hostingu. Zestaw godzinę błędu z wykresami CPU, RAM i I/O w panelu. Na hostingu współdzielonym zobaczysz throttling — serwer celowo dusi proces, zanim ten skończy pracę.

ParametrGdzie go ustawićCo ogranicza
max_execution_timephp.iniCzas działania skryptu PHP (typowo 30 s)
max_input_timephp.iniCzas parsowania danych wejściowych (POST, upload)
memory_limitphp.iniPamięć skryptu; przy eksportach 128M bywa za mało
request_terminate_timeoutphp-fpm poolTwarde ubicie procesu przez PHP-FPM
fastcgi_read_timeoutphp-fpm poolJak długo Nginx czeka na odpowiedź z FPM
proxy_read_timeoutblok proxy_pass w NginxJak długo proxy czeka na upstream

Błąd 504 w PrestaShop — 6 najczęstszych przyczyn

W PrestaShop błąd 504 najczęściej dotyczy zadań administracyjnych, a nie zwykłego wejścia na stronę. Jeśli log Nginx pokazuje 504 na /admin.../index.php, sprawdź po kolei te sześć przypadków:

Zanim dodasz własny indeks, sprawdź w dokumentacji PrestaShop dla deweloperów, jak zbudowane są tabele i relacje — indeks założony na złą kolumnę zwiększa tylko czas zapisów.

PrzyczynaTypowy objawGdzie to potwierdzić
Przebudowa indeksu wyszukiwarki504 po 30–60 s, indeks niekompletnyZaawansowane → Cron, log błędów PHP
Import / eksport CSV504 w trakcie importu, częściowo zapisane danelog błędów PHP, liczba wierszy po imporcie
Masowe faktury PDF / ERP504 przy generowaniu zakresu fakturlog modułu, log requestów do API księgowego
API kurierów i płatności504 przy składaniu zamówienia lub drukowaniu etykietylogi modułu, curl_error, czas odpowiedzi API
Brak indeksów w bazie504 losowo, częściej przy wyszukiwaniu i filtrachEXPLAIN, slow query log
Smarty bez cache504 po deployu, ustępuje po kilku minutachZaawansowane → Wydajność, katalog var/cache

Błąd 504 w WooCommerce — 6 najczęstszych przyczyn

WooCommerce stoi na innym stacku: WordPress, wtyczki, WP-Cron i często HPOS. Dlatego przyczyny 504 wyglądają inaczej niż w PrestaShop.

ZadanieGdzie powinno trafićNarzędzie
Import produktów, aktualizacja stanówkolejka zadań w tleAction Scheduler, WP-CLI
Synchronizacja z ERP / hurtowniąpaczki po 100–500 rekordówAction Scheduler, cron systemowy
Wysyłka maili, raportycron systemowy co minutęcrontab + wp cron event run
Generowanie feedu, eksport zamówieńWP-CLI uruchamiane z cronawp eval-file / wp wc (jeśli dostępne)
Przebudowa cache po deployujednorazowo, poza szczytemWP-CLI, panel hostingu

Naprawa krok po kroku — co zmienić, w jakiej kolejności i czego nie ruszać

Kolejność ma znaczenie. Zacznij od ustalenia, co dokładnie kończy się 504 — RFC 9110 definiuje ten kod jako timeout po stronie pośrednika (Nginx, Cloudflare, load balancer), a nie aplikacji. To znaczy, że PHP mógł skończyć pracę, a klient i tak dostał błąd.

  1. Znajdź URL i akcję. grep " 504 " /var/log/nginx/access.log pokaże konkretne adresy, godziny i liczbę wystąpień. Sprawdź, czy to koszyk, admin-ajax.php, czy eksport. Jeden URL powtarzający się w kółko to problem w kodzie lub zapytaniu, nie w serwerze.
  2. Staging i kopia bazy. mysqldump przed każdą zmianą. Dodanie indeksu na tabeli z 2 mln wierszy potrafi na minuty zablokować zapisy — na produkcji rób to w oknie serwisowym, nie „na oko”.
  3. Limity — i różnica między nimi. Patrz tabela. Kluczowe: na Linuksie max_execution_time nie liczy czasu spędzonego na zapytaniach do bazy i wywołaniach curl, więc samo podniesienie go w php.ini często nic nie zmienia. Nginx po swoim fastcgi_read_timeout zwraca 504, zostawiając zajętego workera PHP-FPM.
  4. Długie operacje do kolejki. WP-CLI, Action Scheduler, cron systemowy, a w PrestaShop Symfony Messenger (bin/console). 500 faktur generowanych komendą z crona to 500 krótkich żądań zamiast jednego wiszącego.
  5. Zapytania. EXPLAIN na najwolniejszym zapytaniu, indeks złożony zamiast pojedynczego, przepisanie meta_query, cache wyników w Redis/Memcached (PrestaShop: Zaawansowane → Wydajność, wymaga rozszerzenia php-redis).
  6. Kiedy podnosić limit. Jeśli jednorazowa operacja trwa 90 s — podnieś fastcgi_read_timeout na czas jej wykonania i wróć do poprzedniej wartości. Jeśli 504 dotyczy zwykłego wejścia na stronę albo kasy — nie. Limit 30 s z komunikatem „spróbuj ponownie” jest lepszy niż 300 s, które przy 4 workerach wyłącza sklep z użytku.
  7. Pułapki. Po edycji pliku Nginx: nginx -t && systemctl reload nginx — bez reloadu zmiana nie działa. Sprawdź nginx -T, który wypisuje pełną złożoną konfigurację i pokazuje, który plik faktycznie wygrywa. Zmiany robione ręcznie na serwerze wrócą przy najbliższym deployu — trzymaj je w repozytorium lub narzędziu do provisioningu.
WarstwaParametrGdzie ustawianyCo realnie robi
Nginxfastcgi_read_timeout / proxy_read_timeoutkonfiguracja serwera wirtualnegopo tym czasie zwraca 504 do klienta, choć PHP nadal pracuje
PHP-FPMrequest_terminate_timeoutplik poolu, np. php-fpm.d/www.confzabija proces workera bez komunikatu dla klienta
PHPmax_execution_timephp.ini, .user.inilimit skryptu; na Linuksie nie liczy czasu I/O (baza, curl)
MariaDB / MySQLmax_statement_timekonfiguracja serwera lub sesjiucina pojedyncze zbyt długie zapytanie
Cloudflare i inne proxywłasny limit ok. 100 spanel dostawcyzwykle zwraca 524, nie 504 — ustal, kto naprawdę zgłasza błąd

Kiedy błąd 504 to wina hostingu — i jak rozmawiać z dostawcą

Błąd 504 na statycznych plikach (np. logo.png, style.css) to prawie zawsze wina infrastruktury. Aplikacja PHP nie jest wtedy w ogóle wywoływana — Nginx czeka na FastCGI, którego nie ma. Podobnie, gdy 504 pojawia się na kilku niepowiązanych aplikacjach na tym samym koncie (sklep, blog, panel). To znak, że problem leży w warstwie współdzielonej: throttling CPU/I/O, przeciążony serwer MySQL albo awaria upstreamu u dostawcy CDN (Cloudflare, Bunny).

Od supportu wymagaj trzech rzeczy: logu z Nginx z dokładnymi timestampami (nie „u nas działa”), wartości fastcgi_read_timeout (domyślnie 60 s, w niektórych panelach 30 s) oraz informacji o limitach CPU/RAM/I-O i ewentualnym throttlingu. Bez tego nie odróżnisz chwilowego skoku ruchu od stałego niedoboru zasobów.

Zgłoszenie musi zawierać: konkretny URL, godzinę z sekundami, kod HTTP, dowód z curl -I (np. curl -I https://twojsklep.pl/koszyk) i output z zakładki Network w DevTools (czas oczekiwania, status). Zamiast „sklep nie działa” wyślij zrzut ekranu z 504 i nagłówkiem X-Request-ID, jeśli hosting go dodaje.

Hosting współdzielony ma limity, których nie przeskoczysz. VPS daje kontrolę nad php-fpm i MySQL, ale wymaga administracji. Hosting zarządzany to kompromis — ktoś inny pilnuje stosu, ale nadal możesz trafić na throttling. Migracja na VPS ma sens, gdy 504 występuje regularnie przy normalnym ruchu (np. 50 zamówień dziennie), a hosting współdzielony nie potrafi wskazać przyczyny. Jeśli 504 pojawia się raz na miesiąc przy imporcie 10 000 produktów, VPS to zbędny wydatek — lepiej zakolejkować import.

Gdy hosting potwierdzi poprawne logi i limity, problem jest w kodzie. Moduł płatności, stary plugin do kuriera, pętla w foreach odpyłująca API bez timeoutu — to typowi sprawcy. Wtedy czas na dewelopera i analizę dokumentacji deweloperskiej PrestaShop lub kodu wtyczki WooCommerce.

Typ hostinguKto zarządza stosemWpływ na 504Kiedy wybrać
WspółdzielonyDostawcaThrottling CPU/I-O, wspólna baza MySQLMały sklep do ~20 zamówień/dzień, brak nietypowych integracji
VPSTy lub agencjaPełna kontrola nad timeoutami, ale łatwo o błędną konfiguracjęSklep z własnymi modułami, niestandardowe API, ruch powyżej 100 zamówień/dzień
ZarządzanyDostawca + Ty (częściowo)Zależny od SLA i limitów — sprawdź, czy nie ma throttlinguFirmy bez działu IT, które chcą wsparcia 24/7 i SLA na reakcję

Jak zapobiegać błędowi 504 — monitoring i higiena wdrożeń

Monitoring zewnętrzny to podstawa. Uptime robot co 1 min na stronę główną to za mało. Dodaj checki na /koszyk i /logowanie — one odpyłują bazę i sesje. Alert ustaw na 5xx z progiem: np. 3 błędy w ciągu 5 minut. Codzienne maile „raport dzienny” trafiają do kosza — chyba że sklep padnie w nocy.

Importy, synchronizacja ERP, generowanie raportów — to musi działać poza requestem użytkownika. Cron lub worker (np. php bin/console w PrestaShop, WP-CLI w WooCommerce) z limitem czasu i kolejką. Jeśli import 50 000 produktów trwa 20 minut, nie może blokować PHP-FPM dla klientów. Ustaw max_execution_time tylko dla skryptu CLI, nie dla całego serwera.

Każda integracja zewnętrzna — płatności (Przelewy24, PayU), kurier (InPost, DPD), ERP — musi mieć własny timeout (np. 5 s) i retry z backoffem (1 s, 2 s, 4 s). Bez tego awaria API przewraca sklep: PHP czeka 60 s na odpowiedź, Nginx zwraca 504. Sprawdź, czy moduł nie robi zapytań synchronicznie w koszyku.

Cache na trzech poziomach: object cache (Redis) dla zapytań MySQL, page cache (np. LSCache, WP Rocket) dla HTML, CDN dla statyków. Pamiętaj o regułach: nie cache'uj /koszyk, /kasa, /admin, /moje-konto. Te URL-e muszą być zawsze świeże — inaczej klient zobaczy cudzy koszyk.

Staging i testy wydajnościowe przed wdrożeniem to obowiązek przy zmianach modułów płatności i kurierów. Wystarczy prosty test: 10 równoczesnych użytkowników dodających produkt do koszyka. Backup bazy i plików z testem odtworzenia — raz w miesiącu odtwórz kopię na stagingu. Backup, którego nie sprawdziliśmy, nie jest backupem.

W DropDigital administracja serwerem obejmuje monitoring, aktualizacje bezpieczeństwa, konfigurację cache i kolejek oraz reakcję na incydenty. SLA do 4 h na reakcję ma sens, gdy sklep zarabia na zamówieniach — każda godzina przestoju to realna strata. Koszt takiego wsparcia to zwykle 500–1500 zł netto miesięcznie, w zależności od liczby integracji i ruchu.

ElementCzęstotliwośćPróg alertu
Strona główna1 min1 błąd 5xx
Koszyk5 min2 błędy 5xx pod rząd
Logowanie5 min2 błędy 5xx pod rząd
Czas odpowiedzi1 min> 3 s przez 5 min

Najczęstsze błędy i jak je wykryć

Podniesienie timeoutu (fastcgi_read_timeout, proxy_read_timeout, max_execution_time) bez diagnozy — „skoro 504 to limit, to zwiększmy limit”.

Jak wykryć: Po zmianie limitu błąd wraca przy większym ruchu albo przy dłuższym zapytaniu. W logach widać ten sam URL, tylko z większą liczbą sekund przed przerwaniem.

Jak naprawić: Zmierz realny czas odpowiedzi: curl -o /dev/null -s -w "time_total: %{time_total}\ntime_starttransfer: %{time_starttransfer}\n" https://twojadomena.pl/koszyk. Jeśli zapytanie trwa 90 s, to problem jest w zapytaniu lub w kodzie, a nie w limicie. Limit podnosimy dopiero wtedy, gdy wiemy, że operacja legalnie trwa długo (np. eksport 50 tys. produktów), i robimy to świadomie, po stronie konkretnej ścieżki.

Grzebanie w konfiguracji serwera, gdy naprawdę widzisz błąd 524 od Cloudflare, a nie 504 od originu.

Jak wykryć: W narzędziach deweloperskich przeglądarki w nagłówkach odpowiedzi pojawia się server: cloudflare, a w treści strony komunikat Cloudflare o przekroczeniu czasu oczekiwania na origin. Kod widoczny dla użytkownika to 524.

Jak naprawić: Ustal, kto wystawia kod. 504 pochodzi z Twojego proxy/Nginx, 524 z Cloudflare, gdy origin nie odpowiedział w ok. 100 sekund. Dopiero po rozróżnieniu tych dwóch sytuacji otwieraj konfigurację serwera — w przeciwnym razie szukasz problemu w złym miejscu.

Zgłoszenie do hostingu „serwer nie działa” bez żadnych danych — bez URL-a, godziny i treści błędu.

Jak wykryć: Support odpisuje prośbą o dokładny czas wystąpienia, adres URL i zrzut ekranu. Sprawa kręci się w kółko przez kilka dni.

Jak naprawić: Przed zgłoszeniem przygotuj: dokładny URL, godzinę z sekundami, kod błędu (504 czy 524), wynik curl -w, fragment nginx error.log z „upstream timed out”. Dopiero taki pakiet pozwala supportowi sprawdzić logi w konkretnym oknie czasowym.

Testowanie wyłącznie we własnej przeglądarce, na zalogowanym koncie i z włączonym CDN.

Jak wykryć: Błąd „nie występuje” u Ciebie, ale klienci raportują go regularnie. Albo odwrotnie — widzisz 504 tylko dlatego, że masz w cache stary, zawieszony request.

Jak naprawić: Powtórz test w trybie incognito, na innym łączu (np. LTE) i z wyłączonym CDN. Jeśli błąd znika po wyłączeniu CDN — problem jest w warstwie proxy/cache. Jeśli zostaje na incognito i LTE — problem jest w aplikacji lub w bazie.

Restart PHP-FPM, MySQL albo całego serwera jako „naprawa” i uznanie sprawy za zamkniętą.

Jak wykryć: Po restarcie błąd znika na kilka godzin lub dni, po czym wraca w tym samym miejscu (koszyk, kasa, zapis produktu, import).

Jak naprawić: Restart traktuj wyłącznie jako tymczasowe odblokowanie sklepu, nie jako rozwiązanie. Zaraz po nim włącz logi, które złapią przyczynę: PHP-FPM slow log (request_slowlog_timeout) i MySQL slow query log. Dopiero wpis w slowlogu wskazuje plik i funkcję do poprawy.

Mylenie 504 z 502, 503 lub 500 i szukanie rozwiązania dla niewłaściwego kodu.

Jak wykryć: W logach Nginx widzisz „connect() failed” lub „no live upstreams” zamiast „upstream timed out”, a użytkownik widzi inny kod niż zakładasz.

Jak naprawić: Najpierw nazwij problem poprawnie. 504 = upstream nie odpowiedział w czasie. 502 = upstream odpowiedział nieprawidłowo lub padł. 503 = brak dostępnych zasobów lub tryb serwisowy. 500 = aplikacja zgłosiła własny błąd. Każdy z tych kodów prowadzi do innego pliku z logami.

Lista kontrolna do odklikania

Podsumowanie

Błąd 504 Gateway Timeout w sklepie prawie nigdy nie jest osobnym problemem — to sygnał, że coś po drodze nie zdążyło odpowiedzieć. Zacznij od ustalenia zakresu: cała strona czy jedna akcja, jak wygląda sytuacja w incognito i na LTE, czy w nagłówkach nie kryje się przypadkiem 524 od Cloudflare. Dopiero potem sięgaj po logi: nginx error.log, PHP-FPM slow log i MySQL slow query log wskazują konkretny plik, funkcję lub zapytanie. Podnoszenie timeoutu bez pomiaru to odsuwanie objawu — problem wróci, najczęściej w najmniej wygodnym momencie. Każdą zmianę w konfiguracji wprowadzaj pojedynczo i notuj efekt, bo tylko tak ustalisz, co realnie pomogło.

Najczęściej zadawane pytania

Czy błąd 504 zawsze oznacza winę hostingu?

Nie. 504 mówi tylko tyle, że serwer proxy nie doczekał się odpowiedzi od upstreamu w zadanym czasie. Upstreamem bywa PHP-FPM, MySQL albo zewnętrzne API — czyli równie dobrze hosting, jak i kod sklepu lub integracja płatności. Dopiero logi wskazują, po której stronie leży przyczyna. Bez tego zgłoszenie do hostingu jest strzałem w ciemno.

Czym różni się błąd 504 od 502?

504 oznacza, że upstream nie odpowiedział w czasie — połączenie żyło, ale nie doczekało się odpowiedzi. 502 oznacza, że upstream odpowiedział nieprawidłowo albo w ogóle nie dał się połączyć, np. PHP-FPM był wyłączony lub padł. W logach Nginx 504 zobaczysz jako „upstream timed out”, a 502 jako „connect() failed” lub „no live upstreams”. Definicje kodów znajdziesz w specyfikacji RFC 9110.

Co oznacza błąd 524 od Cloudflare?

524 to własny kod Cloudflare: Twoje proxy czekało na odpowiedź z serwera origin i się nie doczekało. Dla użytkownika wygląda podobnie jak 504, ale naprawia się go inaczej. Sprawdź, czy origin w ogóle odpowiada na żądania z pominięciem CDN. Jeśli bezpośrednio działa, a przez Cloudflare nie — problem jest w warstwie proxy, a nie w aplikacji.

Czy podniesienie timeoutu naprawi błąd 504?

Zwykle nie, tylko odsunie objaw w czasie. Jeśli zapytanie trwa 90 sekund, wydłużenie limitu do 300 sekund sprawi, że użytkownik będzie czekał 90 sekund i tak dostanie wolny sklep. Limit podnosi się świadomie dla operacji, które legalnie trwają długo, np. masowego eksportu. Domyślnym kierunkiem naprawy jest skrócenie zapytania albo skryptu, nie zwiększanie cierpliwości serwera.

Jak szybko sprawdzić, czy 504 powoduje zewnętrzne API?

Zablokuj czasowo integrację, która budzi podejrzenia: bramkę płatności, API kuriera, synchronizację z ERP. Jeśli 504 znika, źródło jest poza Twoim serwerem. Wtedy sprawdź czasy odpowiedzi tego API i ustaw rozsądny timeout po stronie sklepu, żeby wolne API nie blokowało całego koszyka.

Czy błąd 504 szkodzi pozycjom w Google?

Pojedyncze, krótkotrwałe 504 nie zrobi krzywdy. Problem zaczyna się, gdy błąd wraca regularnie i dotyczy wielu adresów — robot Google traci wtedy dostęp do treści. Warto śledzić to w Search Console i naprawić przyczynę, zanim błąd stanie się stałym elementem strony. Sam kod nie „karze” serwisu, ale utrata dostępności dla robota już tak.

Ile trwa diagnoza błędu 504 w sklepie?

Przygotowanie danych — testy w incognito, curl, przegląd nginx error.log — zajmuje zwykle 10–20 minut. Włączenie slow logów PHP-FPM i MySQL wymaga jeszcze kilku minut i trochę czasu na złapanie zdarzenia. Najdłuższy etap to naprawa: znalezienie konkretnego zapytania lub hooka modułu bywa kwestią godzin. Warto zacząć od pomiaru, bo bez niego każda kolejna godzina idzie w zgadywanie.

Jeśli 504 wraca w PrestaShop lub WooCommerce i chcesz mieć pewność, gdzie leży przyczyna, opisz nam sytuację — zakres błędu, URL i moment wystąpienia. Zajmiemy się logami, konfiguracją i tym, co je realnie generuje.

Źródła i materiały