Definicja błędu 504 - co to jest Gateway timeout i dlaczego się pojawia
Tekst opracowany z wykorzystaniem sztucznej inteligencji. Zasady i ograniczenia
Błąd 504 Gateway Timeout, określony w RFC 9110 sekcji 15.6.5, to kod odpowiedzi HTTP z grupy 5xx informujący, że serwer pośredniczący nie otrzymał odpowiedzi od serwera nadrzędnego w wyznaczonym czasie. W praktyce oznacza to, że serwer bramy lub reverse proxy czekał na odpowiedź od upstream, ale ten nie wyrobił się w wyznaczonym limicie.
Różnica między błędem 504 a 502 Bad Gateway jest istotna dla właściwej diagnozy. W przypadku 502 odpowiedź została otrzymana, ale okazała się błędna lub niekompletna - serwer nadrzędny zwrócił nieprawidłowy kod lub uszkodzoną treść. W 504 sytuacja jest inna - odpowiedzi nie ma wcale, ponieważ serwer aplikacji zamulił się na tyle, że połączenie zostało przerwane z powodu upłynięcia limitu czasu.
Domyślne limity czasowe różnią się w zależności od używanego serwera. W Apache domyślna wartość parametru Timeout wynosi 60 sekund, co obejmuje wszystkie operacje, w tym połączenia proxy. W Nginx standardowy limit proxy_read_timeout to również 60 sekund, choć inne parametry takie jak proxy_connect_timeout mają podobne ustawienia. Przekroczenie tych wartości w praktyce prowadzi do wystąpienia błędu 504.
Błąd 504 wpływa negatywnie na Core Web Vitals, co pogarsza doświadczenie użytkownika i obniża pozycje w Google. Gdy strona ładuje się dłużej niż 2,5 sekundy, wskaźnik Largest Contentful Paint (LCP) wykazuje wartości niewłaściwe, co jest bezpośrednim czynnikiem rankingu. Problem ten staje się nieodłącznym elementem analizy wydajności serwisu w 2026 roku.
Typowe przyczyny wystąpienia błędu 504
Jedną z najczęstszych przyczyn błędu 504 są powolne zapytania do baz danych. Przykładem może być skrypt PHP czekający kilkanaście sekund na pobranie danych z MySQL, gdy zapytanie nie jest odpowiednio zoptymalizowane lub brakuje odpowiednich indeksów. Takie operacje blokują wątki procesora i powodują, że kolejne żądania nie są obsługiwane w wymaganym czasie.
Drugą istotną przyczyną są zbyt długie operacje w tle wykonywane przez serwer aplikacji. Przykładem może być generowanie dużych plików PDF, intensywna obróbka zdjęć lub masowa wysyłka maili. Te zadania wymagają znacznych zasobów CPU i pamięci, co może doprowadzić do zapełnienia kolejki żądań i wystąpienia timeoutu.
Trzecią przyczyną jest przeciążenie serwera aplikacji, gdy brak wolnych wątków procesora. W takiej sytuacji żądania kolejkują się w czekalni, a nowe żądania od razu odrzucane są z powodu upłynięcia limitu czasowego. Ostatnim czynnikiem, który często prowadzi do błędu 504, są zewnętrzne API, które przestały odpowiadać w wymaganym czasie.
| Serwer | Parametr | Domyślna wartość | Zalecana wartość | Uwaga |
|---|---|---|---|---|
| Apache | Timeout | 60s | 120s | Globalny limit dla całego serwera |
| ProxyTimeout | 60s | 120s | Specyficzny dla proxy | |
| ProxyPass | brak | timeout=120s | W konfiguracji virtual hosta | |
| mod_proxy | 60s | 120s | timeout w dyrektywach | |
| mod_http_proxy | 60s | 120s | timeout dla HTTP proxy | |
| Core Web Vitals | WP | WP | WP | Przekroczenie czasu ładowania |
| Nginx | proxy_connect_timeout | 60s | 120s | Czas nawiązania połączenia |
| proxy_send_timeout | 60s | 120s | Czas wysyłania żądania | |
| proxy_read_timeout | 60s | 120s | Czas odczytu odpowiedzi - kluczowy dla 504 | |
| fastcgi_read_timeout | 300s | 300s | Dla PHP-FPM | |
| uwsgi_read_timeout | 300s | 300s | Dla aplikacji uWSGI | |
| Core Web Vitals | WP | WP | WP | Ładowanie > 2.5s = LCP problem |
Warto przyjrzeć się konfiguracji timeoutów w kontekście wymagań aplikacji. Przed podniesieniem limitu zawsze weryfikuj w dzienniku proxy, którą fazę łączenia przekracza limit - to pozwoli uniknąć ukrywania rzeczywistych problemów. Monitorowanie Core Web Vitals przy pomocy narzędzi Pingdom lub GTmetrix jest nieodłącznym elementem analizy, gdy błąd 504 często objawia się spadkiem Largest Contentful Paint ponad 2,5 sekundy.
Diagnostyka błędu 504 - jak znaleźć przyczynę w logu proxy
Błąd 504 Gateway Timeout to kod odpowiedzi HTTP określony w RFC 9110, sekcji 15.6.5, który sygnalizuje przekroczenie czasu oczekiwania między serwerem pośredniczącym a nadrzędnym. Przeglądarka jedynie prezentuje komunikat o błędzie, a rzeczywista przyczyna problemu znajduje się w logu proxy. Istotne jest, by nie szukać winnych w przeglądarce, lecz przejść do analizy dziennika działań serwera pośredniczącego.
W trakcie diagnozowania błędu 504 należy skupić się na rejestrze działań proxy, gdzie każdy wiersz zapisuje kluczowe informacje o przepływie żądań. Przykładowy wpis w logu może wyglądać następująco: 192.168.1.1 - - [12/sep/2023:14:30:25 +0200] "GET /api/raport HTTP/1.1" 504 162. Aby znaleźć żądanie w logu, trzeba zapisać: metodę HTTP, host i pełną ścieżkę adresu, moment zdarzenia ze strefą czasową, czynność, która doprowadziła do błędu. Moment zdarzenia to 12 września 2023 r. o 14:30:25 w strefie czasowej +0200. Trzecią czynnością doprowadzającą do błędu jest najczęściej długotrwałe zapytanie do bazy danych lub operacja w tle.
| Pole | Przykład | Znaczenie |
|---|---|---|
| Metoda HTTP | GET | Typ żądania |
| Host | api.przyklad.pl | Adres serwera |
| Ścieżka | /api/raport | Endpoint wywołujący błąd |
| Czas | [12/sep/2023:14:30:25 +0200] | Moment zdarzenia ze strefą |
Po identyfikacji problematycznego żądania w logu proxy następuje weryfikacja zewnętrzna przy pomocy narzędzia curl. Parametr -sv włącza tryb verbose, wyświetlając szczegóły połączenia, natomiast --resolve wymusza rozwiązanie nazwy na określony adres IP. Dzięki temu ustaleniu można zweryfikować, czy problem leży po stronie aplikacji, czy w konfiguracji proxy.
| Kod | Nazwa | Przyczyna |
|---|---|---|
| 6 | Could not resolve host | Błąd DNS lub literówka w nazwie |
| 7 | Failed to connect to host | Serwer nie odpowiada lub port zablokowany |
| 28 | Operation timeout | Przekroczono limit czasu połączenia |
Potwierdzenie przyczyny błędu 504 wymaga sprawdzenia statusu usługi na hoście. Dwie komendy są niezbędne: systemctl status nginx oraz journalctl -u nginx --since "14:30:00". Pierwsza komenda pokazuje aktualny stan usługi, druga filtruje logi systemowe z określonej godziny. Jeśli usługa jest wyłączona, uruchom ją komendą systemctl start nginx. Warto przyjrzeć się wynikom tych poleceń przed podniesieniem timeoutu - nie wszystkie 504 wymagają zmiany konfiguracji. Niektóre z nich wynikają z zamierzonych długich operacji, które potrzebują dodatkowego czasu na zakończenie.
Log proxy wykazuje przyczynę błędu 504, a curl testuje połączenie z proxy, dlatego właściwa kolejność działań to najpierw analiza dziennika, potem weryfikacja ręczna, a na końcu sprawdzenie statusu usługi. Systemctl status usługi nginx jest niezbędny do potwierdzenia działania infrastruktury. Jeśli zmiana limitów jest zasadna, podnieś limit tej fazy, którą wskazał log, a nie wszystkich trzech. Dla operacji pokroju raportów rozważ zmianę po stronie aplikacji: zadanie w tle i powiadomienie o gotowym pliku.
Rozwiązania techniczne - konfiguracja Apache, Nginx i PHP-FPM
Błąd 504 Gateway Timeout oznacza, że serwer pośredniczący nie doczekał się odpowiedzi od aplikacji w wyznaczonym czasie oczekiwania. Aby usunąć ten problem, konieczne jest dokładne dopasowanie ustawień czasowych oraz optymalizacja zasobów serwera. Poniżej przedstawiamy konkretne kroki techniczne dla administratorów systemów.
CWP WebServers | How to configure Nginx/Varnish/Apache & PHP-FPM global or per domain
Trzy dyrektywy kontrolujące timeouty w Nginx
W konfiguracji Nginx istnieją trzy dyrektywy odpowiedzialne za zarządzanie limitami czasowymi połączeń proxy. Pierwsza, proxy_connect_timeout, określa maksymalny czas nawiązania połączenia z serwerem nadrzędnym - domyślnie 60s, zalecane 75s dla środowisk produkcyjnych. Druga, proxy_send_timeout, ustawia limit wysyłania żądania do aplikacji - wartość domyślna 60s, a optymalna to 120s dla usług wymagających dłuższych operacji zapisu. Ostatnia, proxy_read_timeout, kontroluje czas odczytu odpowiedzi z aplikacji - tutaj wartości domyślne 60s w wersji Nginx 1.18+ należy zwiększyć do 300s, szczególnie gdy aplikacja wykonuje złożone zapytania do bazy danych.
Tabela porównawcza ustawień timeoutów Apache vs Nginx
| Komponent | Wartość domyślna | Wartość zalecana |
|---|---|---|
| Apache mod_proxy (ProxyTimeout) | 60s | 120s |
| Nginx proxy_connect_timeout | 60s | 75s |
| Nginx proxy_send_timeout | 60s | 120s |
| Nginx proxy_read_timeout | 60s | 300s |
| PHP-FPM max_execution_time | 30s | 300s |
Warto przyjrzeć się konfiguracji Apache, gdzie parametr ProxyTimeout ustawia się w sekcji mod_proxy. Dla konfiguracji Nginx dyrektywy timeoutów dodaje się bezpośrednio w bloku server lub location, co pozwala na precyzyjne dopasowanie wartości do konkretnych endpointów. Najistotniejszym elementem jest także dostosowanie limitu czasu w PHP-FPM - parametr max_execution_time wpływa bezpośrednio na to, jak długo skrypty mogą wykonywać się w trybie synchronicznym.
Metody optymalizacji zasobów serwera
Pierwsza ścieżka działania polega na zwiększeniu limitu czasu w konfiguracji. W przypadku konfiguracji Apache należy edytować plik httpd.conf lub nginx.conf, dodając odpowiednie dyrektywy w bloku serwera. Zmiany należy zatwierdzić komendami nginx -s reload lub systemctl reload apache2. Druga metoda, optymalizacja zasobów, obejmuje zwiększenie ilości pamięci RAM - przykładowo przyrost z 4GB do 8GB przywraca stabilność przy intensywnym obciążeniu. Trzecią metodą jest aktualizacja oprogramowania, w tym najważniejszych pakietów: php8.1-fpm, opcache, redis oraz rozwiązań CDN typu Cloudflare.
Dla konfiguracji Nginx po zwiększeniu wartości timeoutów należy zastosować zmiany komendą systemctl reload nginx. Optymalizacja zasobów przejawia się także w zmianie planu hostingowego z Shared na VPS, co zapewnia dedykowane zasoby CPU i pamięci. Aktualizacja oprogramowania wykonuje się poleceniami apt update && apt upgrade php-fpm nginx apache2, co eliminuje znane luki bezpieczeństwa oraz problemy z kompatybilnością.
Diagnoza połączeń między serwerami
W przypadku gdy diagnoza wskazuje na problemy sieciowe między serwerami należy najpierw użyć narzędzia curl -sv http://localhost:8080/api/health, aby zweryfikować dostępność aplikacji bezpośrednio. Następnie należy sprawdzić status usług przy pomocy systemctl status nginx, systemctl status php8.1-fpm oraz systemctl status mysql. Analiza logów to kolejny istotny krok - polecenie tail -f /var/log/nginx/error.log pozwala śledzić bieżące błędy, a grep 'upstream timed out' /var/log/nginx/access.log pomaga zlokalizować konkretne przypadki timeoutu.
Typowe przyczyny błędu 504 to przeciążenie serwera aplikacji, brak odpowiednich indeksów w bazie danych oraz problemy sieciowe między serwerami. Skrypty zasobożerne to inne częste źródło problemu - obejmują one operacje PHP czekające na dane z MySQL przez kilkanaście sekund, generowanie dużych plików PDF czy obróbkę zdjęć w trybie synchronicznym. Rozwiązaniem jest przeniesienie zadań do kolejki przy użyciu Redis lub RabbitMQ, implementacja cron zamiast synchronicznych operacji oraz włączenie mechanizmów cache takich jak OPcache lub Redis.
Strategie zapobiegania - optymalizacja baz danych i zasobów serwera
Skuteczne zapobieganie błędowi 504 wymaga systematycznej optymalizacji infrastruktury oraz aplikacji. Przede wszystkim należy zadbać o wydajność baz danych, ponieważ brak odpowiednich indeksów jest jedną z najczęstszych przyczyn przekraczania limitu czasowego. Gdy zapytania PHP czekające kilkanaście sekund na dane z MySQL nie posiadają indeksu na kolumnie filtrującej, mogą one przekroczyć ustalony próg czasowy, co w efekcie kończy się timeoutem bramki 504.
W ramach optymalizacji baz danych należy przeprowadzić audyt istniejących indeksów oraz analizę kosztu operacji zapytania. Norma RFC 9110, sekcja 15.6.5, precyzyjnie definiuje kod 504 jako błąd sieciowy nazywany Gateway timeout, co oznacza, że łącze zostało zerwane z powodu upłynięcia limitu czasu, a nie z powodu błędnej odpowiedzi. Przykładem może być skrypt generujący raporty sprzedaży, który bez indeksu na kolumnie data zamówienia wymaga 15 sekund na przetworzenie, a z odpowiednim indeksem zakończy się w 0,5 sekundy.
Typowe przyczyny wystąpienia błędu 504 to brak odpowiednich indeksów w bazie danych lub zbyt skomplikowane zapytania, które obciążają system. Przykładami długotrwałych operacji w tle są generowanie dużych plików PDF, obróbka zdjęć czy wysyłka masowych maili wykonywana synchronicznie podczas ładowania strony - wszystkie te czynności mogą wystąpić w taki sposób, że przekroczą dostępny czas odpowiedzi.
| Parametr | Apache (domyślnie) | Apache (rekomendowane) | Nginx (domyślnie) | Nginx (rekomendowane) |
|---|---|---|---|---|
| proxy_connect_timeout | 60 s | 30 s | 60 s | 75 s |
| proxy_send_timeout | 60 s | 60 s | 60 s | 60 s |
| proxy_read_timeout | 60 s | 300 s | 60 s | 300 s |
W nginx istnieją trzy dyrektywy - proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout - które kontrolują kolejne fazy komunikacji między proxy a backendem. Domyślny limit zazwyczaj wynosi 60 s w Apache lub około 30 s w Nginx, co może być niewystarczające dla operacji generowania dużych plików PDF. W takich przypadkach rozważa się wdrożenie rozwiązań asynchronicznych, takich jak generowanie PDF w tle z powiadomieniem e-mail zamiast blokowania żądania w czasie rzeczywistym.
Implementacja równoważenia obciążenia stanowi skuteczną strategię rozłożenia obciążenia serwera aplikacji, szczególnie w sytuacjach przeciążenia. Gdy brak wolnych wątków procesora powoduje, że nowe żądania trafiają do kolejki, następuje spadek wydajności i zwiększone ryzyko wystąpienia błędu 504. Sieci dostarczania treści, takie jak Cloudflare, pomagają zmniejszyć obciążenie serwera aplikacji poprzez cache'owanie statycznych zasobów i rozłożenie ruchu na wiele punktów egzekucji.
Diagnostyka problemów w środowisku WordPress może obejmować tymczasowe wyłączenie wtyczek oraz zmianę motywu na domyślny, co często skutkuje znaczną redukcją czasu odpowiedzi - na przykład z 45 sekund do 3 sekund. W przeciwieństwie do błędu 502 Bad Gateway, gdzie odpowiedź była błędna, w 504 odpowiedzi nie ma wcale - serwer aplikacji zamulił się na tyle, że połączenie zostało przerwane z powodu upłynięcia limitu czasu. Warto także weryfikować konfigurację PHP-FPM, która może wymagać aktualizacji lub dostosowania parametrów buforowania.
Podniesienie timeoutu jest rozwiązaniem ostatecznym tylko w przypadkach, gdy diagnoza potwierdzi, że długi czas operacji jest zamierzony, np. przy generowaniu rocznych raportów. W takich sytuacjach można rozważyć zamianę operacji synchronicznych na asynchroniczne, co pozwala na lepsze zarządzanie zasobami systemu. Technologie monitorujące, takie jak Pingdom czy GTmetrix, umożliwiają systematyczną analizę wydajności i szybkie wykrywanie trendów obciążeniowych.
FAQ - najczęściej zadawane pytania o błąd 504
W sekcji znajdziesz odpowiedzi na najczęściej zadawane pytania dotyczące timeoutu bramki 504, które utrudniają dostęp do stron internetowych. Każde wyjaśnienie opiera się na analizie przyczyn wystąpienia błędu 504 oraz praktycznych wskazówkach dotyczących jego usunięcia.
Czy błąd 504 jest winą przeglądarki czy użytkownika?
Błąd 504 Gateway Timeout nie jest winą przeglądarki ani użytkownika, lecz głębszymi problemami infrastrukturalnymi. Typowe przyczyny to powolne zapytania do bazy danych, zbyt długie operacje w tle, przeciążenie serwera aplikacji oraz zewnętrzne API. Jeśli użytkownik odświeża stronę, błąd może się powtarzać, dopóki przyczyna nie zostanie wyeliminowana.
Jak długo trwa propagacja DNS w przypadku problemów z dostępnością?
Propagacja DNS zwykle trwa 24-48 godzin, a w skrajnych przypadkach do 72 godzin, zgodnie z danymi źródłowymi. Czyszczenie pamięci podręcznej przeglądarki lub zmiana ustawień sieciowych nie skraca tego czasu, ponieważ propagacja odbywa się na poziomie rejestratorów domen. W praktyce jak rozwiązać problem 504 w kontekście problemu z DNS wymaga czasu, a nie szybkiej interwencji.
Czy czyszczenie pamięci podręcznej wpływa na rozwiązanie problemu 504?
Czyszczenie pamięci podręcznej przeglądarki nie rozwiązuje błędu 504, ponieważ problem leży po stronie komunikacji między proxy a aplikacją. Błąd 504 oznacza, że serwer pośredniczący nie otrzymał odpowiedzi w ustalonym czasie, a nie że cache jest nieprawidłowy. W najczęstszych przypadkach FAQ błąd 504 prowadzi do nieudanych prób naprawy poprzez czyszczenie pamięci podręcznej.
Kiedy należy zgłosić problem dostawcy hostingu?
Zgłoszenie do dostawcy hostingu jest niezbędne w trzech sytuacjach: gdy logi proxy wskazują na problemy z połączeniami między serwerami, gdy podniesienie limitu czasu nie przynosi poprawy, oraz gdy serwer aplikacji jest przeciążony do granicy. Należy przygotować zgłoszenie z kodem 504, pełnym adresem, momentem ze strefą czasową i czynnością wywołującą. Timeout usługi 504 stanowi istotny element opisu problemu w raporcie.
Jakie są różnice między błędami HTTP 500, 502, 503 a 504?
Poniższa tabela porównuje istotne różnice pomiędzy poszczególnymi kodami błędów HTTP:
| Kod błędu | Definicja | Główna przyczyna |
|---|---|---|
| 500 | Błąd wewnętrznego serwera | Problem w kodzie aplikacji lub konfiguracji |
| 502 | Bad Gateway | Odpowiedź od serwera nadrzędnego była pusta lub nieprawidłowa |
| 503 | Service Unavailable | Serwer jest niedostępny (przeładowany lub w trybie konserwacji) |
| 504 | Gateway Timeout | Przekroczony limit czasu oczekiwania na odpowiedź od serwera nadrzędnego |
Czy można samodzielnie naprawić błąd 504 bez dostępu do serwera?
Pełna naprawa wymaga dostępu do serwera, ale można przygotować szczegółowe zgłoszenie do dostawcy hostingu. Należy zanotować kod błędu, adres URL, godzinę zdarzenia ze strefą czasową oraz czynność wywołującą problem. FAQ błąd 504 wskazuje, że bez dostępu do logów serwera diagnoza jest ograniczona, a jedynie podstawowe kroki można wykonać z poziomu klienta. Przejrzyj logi proxy pod kątem wskazówek dotyczących metody HTTP, hosta i momentu zdarzenia, aby ułatwić identyfikację przyczyny.
Redakcja WPMag · wszystkie artykuły