Błąd HTTP 504 (Gateway Timeout) oznacza, że serwer działający jako brama lub proxy nie otrzymał na czas odpowiedzi od serwera nadrzędnego, przez co przerywa połączenie i wyświetla komunikat o błędzie. Problem ten może wynikać z wielu przyczyn – od błędnej konfiguracji serwerów, przez przeciążenie zasobów, po zakłócenia w komunikacji sieciowej i błędy DNS. W niniejszym artykule omawiamy naturę tego błędu, jego przyczyny, metody diagnozy oraz praktyczne rozwiązania dla użytkowników i administratorów. Analizujemy też wpływ błędu 504 na SEO oraz doświadczenie użytkownika.

Zdefiniowanie błędu HTTP 504 i jego znaczenie techniczne

Czym jest błąd 504 gateway timeout

Błąd 504 gateway timeout to kod odpowiedzi HTTP z grupy błędów 5xx, które wskazują na problemy po stronie serwera. Oznacza on, że serwer działający jako brama lub proxy nie otrzymał w ustalonym czasie odpowiedzi od serwera nadrzędnego, niezbędnej do ukończenia żądania. W praktyce serwer pośredniczący (np. reverse proxy, load balancer lub bramka) czeka na odpowiedź od innego serwera, ale ta nie nadchodzi w wyznaczonym limicie.

Aby lepiej zrozumieć problem, warto przyjrzeć się przebiegowi komunikacji. Po wpisaniu adresu URL żądanie trafia najpierw na serwer pośredniczący (bramę/proxy). Ten przekazuje je do serwera nadrzędnego, który obsługuje zawartość strony. Serwer pośredniczący czeka na odpowiedź określony czas (zwykle 30–60 sekund, konfigurowalne); jeśli odpowiedź nie nadejdzie, zwraca błąd 504.

Różne formy komunikatów błędu 504

W zależności od konfiguracji serwera i przeglądarki błąd 504 może przyjmować różne komunikaty. Najczęściej spotykane przykłady to:

504 Gateway Timeout

Upłynął limit czasu oczekiwania bramy

Ta strona nie działa – serwer zbyt długo nie odpowiada

Niezależnie od brzmienia, wszystkie te komunikaty oznaczają to samo – zbyt wolną lub przerwaną komunikację między serwerami.

Anatomia problemu – przyczyny błędu 504

Główne kategorie przyczyn

Błąd 504 ma wiele źródeł, które można pogrupować następująco:

  • przeciążenie serwera nadrzędnego – niewystarczające zasoby CPU/RAM, skoki ruchu, procesy obciążające,
  • błędne konfiguracje – zbyt krótkie limity czasu, problemy DNS, reguły firewall/WAF, nieprawidłowa obsługa żądań HTTP,
  • kłopoty sieciowe – wysokie opóźnienia, utrata pakietów, awarie łączy.

Przeciążenie serwera docelowego

Jedną z najczęstszych przyczyn jest przeciążenie serwera nadrzędnego, do którego odwołuje się brama lub proxy. Może to wynikać z nagłych skoków ruchu (np. po publikacji w mediach społecznościowych) lub z ataku DDoS. Serwer może też być czasowo niedostępny z powodu prac konserwacyjnych/aktualizacji, albo wykonywać intensywne procesy (backupy, skany antywirusowe, generowanie raportów), które zużywają CPU i RAM.

Przeciążenia są szczególnie dotkliwe w e‑commerce i aplikacjach z wieloma jednoczesnymi połączeniami. Gdy liczba wątków wykonawczych (np. PHP) jest ograniczona i wszystkie są zajęte, nowe żądania trafiają do kolejki, która może szybko przekroczyć pojemność i prowadzić do timeoutów.

Problemy z konfiguracją DNS

Błędy DNS często występują przy migracjach i zmianach hostingu. Gdy rekordy DNS są źle zarządzane lub propagacja zmian nie jest zakończona, serwer pośredniczący może nie odnaleźć właściwego adresu IP serwera docelowego. Zjawisko bywa przejściowe – część użytkowników widzi błąd, inni nie, zależnie od aktualizacji pamięci podręcznej serwerów DNS. Propagacja DNS zwykle trwa 24–48 godzin, a w skrajnych przypadkach do 72 godzin.

Nieprawidłowa konfiguracja serwerów pośredniczących

Serwerami pośredniczącymi bywają serwery reverse proxy (np. Nginx), load balancery, zapory aplikacyjne (WAF) i bramki API. Najczęstszy problem to zbyt krótkie limity czasu, które powodują porzucanie żądań przed pojawieniem się odpowiedzi z backendu. Przykład: jeśli w Nginx proxy_read_timeout to 30 s, a backend potrzebuje 45 s na wykonanie złożonego zapytania do bazy, żądanie zakończy się błędem 504.

Inne problemy to zbyt agresywne lub błędne reguły firewalli (blokowanie/oporządzanie ruchu między warstwami) oraz błędna konfiguracja WAF, która może mylnie uznawać poprawne żądania za niebezpieczne i doprowadzać do timeoutów zamiast jasnej decyzji blokuj/akceptuj.

Problemy z kodem aplikacji i bazą danych

Źródłem bywa też kod aplikacji i konfiguracja bazy danych. Niezoptymalizowane zapytania SQL, nieefektywne algorytmy i nieobsłużone wyjątki wydłużają czas przetwarzania. Szczególnie groźne są blokady tabel – jedna transakcja trzyma blokadę, inne czekają, co powoduje kaskadę opóźnień i przekroczenia timeoutów. Zalegające procesy (np. „sleeping” w MySQL), które nie kończą się prawidłowo, potrafią obniżyć ogólną wydajność bazy i wydłużyć czasy odpowiedzi.

Przebieg techniczny – jak dokładnie dochodzi do błędu 504

Sekwencja zdarzeń prowadząca do przekroczenia czasu

Użytkownik wysyła żądanie HTTP (wpisanie URL/kliknięcie linku). Trafia ono do serwera pośredniczącego, który decyduje, do którego backendu je przekazać. Następnie pośrednik nawiązuje połączenie TCP z serwerem nadrzędnym, wysyła żądanie i uruchamia wewnętrzny licznik (timer) oczekiwania na odpowiedź.

Backend w idealnym scenariuszu odpowiada w setkach milisekund lub kilku sekundach. Jeśli jednak backend potrzebuje dłużej (kolejki, złożone operacje, przeciążenie), a timer po stronie pośrednika wygaśnie, pośrednik przerywa połączenie i zwraca do przeglądarki odpowiedź HTTP 504 gateway timeout. Domyślny limit to zwykle 60 s w Apache lub ok. 30 s w Nginx (zależnie od konfiguracji).

Rola limitów czasu (timeouts) w architekturze sieciowej

Limity czasu zapobiegają „wiecznemu” wiszeniu połączeń i zjadaniu zasobów. Muszą być jednak dobrane rozsądnie – zbyt krótkie wartości wywołują fałszywe 504 dla legalnych, dłuższych operacji. Różne komponenty mają różne limity (nawiązanie połączenia, wysyłanie, czytanie pierwszej części odpowiedzi, łączny czas operacji) i powinny być ze sobą spójne.

Diagnozowanie błędu 504 – metodyczne podejście do rozwiązywania problemów

Pierwsze kroki dla użytkowników

Aby szybko wykluczyć typowe, przejściowe przyczyny, wykonaj poniższe czynności:

  • odczekaj kilka minut i zrób twarde odświeżenie strony (Windows: Ctrl+F5, macOS: Cmd+Shift+R),
  • sprawdź łącze (przełącz Wi‑Fi/dane mobilne) oraz spróbuj na innej przeglądarce/urządzeniu,
  • tymczasowo wyłącz VPN, jeśli z niego korzystasz,
  • zweryfikuj ustawienia lokalnego proxy – błędna konfiguracja może wprowadzać opóźnienia,
  • pamiętaj, że część błędów 504 jest przejściowa i znika po krótkim czasie.

Diagnostyka po stronie administratora witryny

Skuteczną diagnozę oprzyj na trzech filarach:

  • logi serwera – odfiltruj 504 w logach dostępu/błędów i szukaj wzorców czasowych oraz problematycznych ścieżek,
  • obciążenie zasobów – monitoruj CPU/RAM/dysk i kolejki wątków,
  • wydajność bazy danych – w MySQL użyj SHOW PROCESSLIST i analizy wolnych zapytań, aby wyłapać blokady i długie transakcje.

Rozwiązania dla użytkowników końcowych

Podstawowe techniki rozwiązywania problemów

Jeśli problem dotyczy tylko Twojego urządzenia lub sieci, zastosuj poniższe kroki:

  • wczyść pamięć podręczną przeglądarki (Windows: Ctrl+Shift+Delete, macOS: Cmd+Shift+Delete),
  • odśwież lokalną pamięć DNS (Windows: ipconfig /flushdns, macOS: sudo dscacheutil -flushcache),
  • tymczasowo wyłącz zaporę systemową/antywirus i ponownie przetestuj połączenie (pamiętaj o ponownym włączeniu).

Testowanie wariantów i ograniczenia ruchu

Sprawdź, czy błąd występuje na wielu witrynach i urządzeniach. Jeśli problem dotyczy wyłącznie jednej witryny na wielu urządzeniach – najpewniej jest po stronie serwera. Rozważ zmianę serwerów DNS na publiczne, aby wykluczyć niestabilne, wolne resolvery u dostawcy internetu:

Dostawca DNS Adresy
Google Public DNS 8.8.8.8, 8.8.4.4
Cloudflare 1.1.1.1, 1.0.0.1
Quad9 9.9.9.9, 149.112.112.112

Niestabilne lub wolne DNS‑y dostawcy internetu mogą pogarszać łączność i pośrednio sprzyjać błędom 504.

Rozwiązania dla administratorów witryn i serwerów

Konfiguracja Apache

Dla serwera Apache kluczowe jest właściwe ustawienie limitów czasu i parametrów PHP. W pliku konfiguracyjnym Apache (np. /etc/apache2/apache2.conf lub /etc/httpd/conf/httpd.conf) zwiększ wartość dyrektywy TimeOut (np. do 600 s):

TimeOut 600

Następnie w php.ini (np. /etc/php.ini lub /etc/php/*/fpm/) podnieś max_execution_time (np. do 300 s):

max_execution_time = 300

Po zmianach zrestartuj Apache:

sudo service apache2 restart

Konfiguracja Nginx z PHP-FPM

W środowisku Nginx + PHP‑FPM należy skoordynować ustawienia w trzech miejscach:

  1. Edytuj plik puli PHP‑FPM (np. /etc/php/7.4/fpm/pool.d/www.conf) i ustaw request_terminate_timeout:

    request_terminate_timeout = 300

  2. W /etc/php.ini podnieś max_execution_time:

    max_execution_time = 300

  3. W konfiguracji Nginx (np. /etc/nginx/nginx.conf lub wirtualny host w /etc/nginx/sites-available/default) ustaw fastcgi_read_timeout i fastcgi_send_timeout w bloku location ~ \.php$:

    location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_read_timeout 300;
    fastcgi_send_timeout 300;
    }

Po zmianach zrestartuj usługi:

sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm

Konfiguracja Nginx jako reverse proxy

Jeśli Nginx działa jako reverse proxy do Apache lub innego serwera aplikacyjnego, skonfiguruj timeouty w sekcji upstream i serwera wirtualnego:

upstream backend {
server backend1.example.com:80;
server backend2.example.com:80;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}

Te dyrektywy kontrolują:

  • proxy_connect_timeout – ile czasu czekać na nawiązanie połączenia z serwerem upstream,
  • proxy_send_timeout – ile czasu czekać na wysłanie żądania do serwera upstream,
  • proxy_read_timeout – ile czasu czekać na odpowiedź od serwera upstream,
  • send_timeout – ile czasu czekać na wysłanie odpowiedzi do klienta.

Po zmianach przetestuj konfigurację i przeładuj Nginx:

sudo nginx -t
sudo systemctl reload nginx

Zaawansowane strategie optymalizacji i zapobiegania

Implementacja równoważenia obciążenia (load balancing)

Równoważenie obciążenia rozprasza ruch pomiędzy wiele serwerów backendu i ogranicza ryzyko przeciążenia jednego węzła. Kluczowe jest również regularne sprawdzanie kondycji serwerów.

Najczęściej stosowane algorytmy to:

  • round‑robin,
  • least connections,
  • weighted least connections.

Przykładowe rozwiązania on‑premise i w chmurze obejmują:

  • Nginx,
  • HAProxy,
  • F5 BIG‑IP,
  • Kemp LoadMaster,
  • AWS Application Load Balancer,
  • Azure Load Balancer,
  • Google Cloud Load Balancing.

Kontrole kondycji (health checks) pozwalają automatycznie wyłączać z puli niedomagające węzły i przywracać je po powrocie do normy.

Optymalizacja kodu aplikacji i bazy danych

Nawet najlepsza infrastruktura nie zastąpi sprawnego kodu. Najczęstsze źródła opóźnień to:

  • nieoptymalne zapytania SQL – brak indeksów, pełne skany tabel; korzystaj z logu wolnych zapytań i dodawaj indeksy na kolumnach w WHERE/JOIN,
  • problem N+1 – zastępuj wielokrotne zapytania pojedynczym JOIN lub prefetchingiem,
  • brak buforowania wyników – te same zapytania wykonywane wielokrotnie bez cache.

Wdrażaj buforowanie wielopoziomowe, aby skrócić czasy odpowiedzi i odciążyć backend:

  • cache zapytań w bazie danych,
  • cache aplikacyjny (Redis, Memcached),
  • cache HTTP po stronie serwera/proxy lub wtyczki CMS (np. WP Super Cache, W3 Total Cache).

Wykorzystanie sieci dostarczania treści (CDN)

CDN przechowuje kopie zasobów bliżej użytkownika, co redukuje opóźnienia i obciążenie serwera głównego. Popularne usługi to Cloudflare, Akamai, AWS CloudFront, Bunny CDN. Pamiętaj jednak, że błędna konfiguracja lub awaria CDN także może powodować problemy – tymczasowe wyłączenie CDN i skierowanie DNS‑ów bezpośrednio na serwer źródłowy bywa pomocne diagnostycznie.

Monitorowanie i alertowanie

Wczesne wykrywanie problemów obniża ich wpływ na użytkowników i biznes. Wdróż monitoring infrastrukturalny i aplikacyjny:

  • Prometheus i Grafana,
  • Zabbix,
  • Datadog.

Skonfiguruj kanały powiadomień, aby reagować zanim problem się nasili:

  • e‑mail,
  • SMS,
  • Slack lub Microsoft Teams.

Regularne testy obciążeniowe ujawnią wąskie gardła wcześniej. Polecane narzędzia to:

  • Apache JMeter,
  • Loader.io,
  • Locust.

Wpływ błędu 504 na SEO i doświadczenie użytkownika

Konsekwencje dla rankingu w wyszukiwarkach

Przejściowe błędy 504 (kilka minut) zwykle nie wpływają trwale na ranking w Google – robot spróbuje ponownie później. Dłuższe okresy niedostępności (np. 6 godzin i więcej) lub powtarzające się 504 mogą czasowo obniżyć pozycje, a nawet wykluczyć strony z indeksu. Warto monitorować komunikaty w Google Search Console (np. raporty o problemach z indeksowaniem).

Doświadczenie użytkownika i wskaźniki biznesowe

Z punktu widzenia użytkownika błąd 504 jest frustrujący – zamiast przeczytać treść, kupić produkt czy wysłać formularz, widzi komunikat o błędzie i często opuszcza witrynę. W e‑commerce każda minuta niedostępności to realna strata przychodów, zwłaszcza w okresach szczytowych (np. Black Friday, Cyber Monday). W serwisach contentowych 504 obniża liczbę odsłon i zaangażowanie.

Zaawansowana diagnostyka i studium przypadków

Analiza logów serwera w celu identyfikacji wzorców

Szukaj korelacji: konkretne pory dnia, typy żądań (np. POST z dużą ilością danych), konkretne adresy URL/ścieżki, a nawet określone agenty użytkownika (user agent). Jeśli 504 pojawia się np. o 2:00 w nocy podczas backupu bazy, winowajca jest oczywisty – proces kopii obciąża zasoby. Jeśli błąd pojawia się tylko przy danym skrypcie, problemem może być jego logika (pętla, zbyt duże payloady, blokady).

Testowanie pod obciążeniem

Testy obciążeniowe pozwalają określić, przy jakim ruchu serwer zaczyna zwracać 504. Zwiększaj stopniowo liczbę wirtualnych użytkowników (np. 10 → 50 → 100 → 500 → 1000) i obserwuj czasy odpowiedzi, błędy i wykorzystanie zasobów. Punkt, w którym zaczynają się 504, to kluczowa granica – jeśli jest poniżej oczekiwanych pików ruchu, konieczna jest optymalizacja lub skalowanie.

Wnioski i najlepsze praktyki

Holistyczne podejście do zapobiegania błędom 504

Zapobieganie błędom 504 wymaga spojrzenia na infrastrukturę, konfigurację, kod i architekturę systemu. Jedno rozwiązanie rzadko wystarcza – zwykle konieczna jest kombinacja wielu działań.

W codziennej praktyce administrator powinien realizować następujące działania:

  • regularnie monitorować metryki serwera (CPU, RAM, I/O) i reagować proaktywnie,
  • optymalizować kod aplikacji i zapytania do bazy, eliminując wąskie gardła,
  • spójnie konfigurować limity czasu na wszystkich poziomach (Apache/Nginx, PHP‑FPM, aplikacja),
  • wdrażać równoważenie obciążenia, mechanizmy buforowania i CDN,
  • weryfikować propagację i poprawność DNS po każdej zmianie,
  • prowadzić testy obciążeniowe i planowanie pojemności (capacity planning),
  • mieć gotowy plan awaryjny: zespół on‑call, runbooki, monitoring i szybkie alerty.

Rekomendacje dla różnych typów witryn

Poniżej skrócone wytyczne, jak dopasować strategię do skali i charakteru projektu:

  • Małe blogi i serwisy statyczne – korzystaj z zarządzanego hostingu oraz CDN dla treści statycznych; uprość konfigurację i postaw na cache,
  • Sklepy internetowe – stosuj równoważenie obciążenia i wiele serwerów backendu, a także dedykowany monitoring i zespół DevOps,
  • API o wysokiej wydajności – preferuj przetwarzanie asynchroniczne, intensywne buforowanie i optymalizację bazy danych.

Monitorowanie i alertowanie muszą działać stale, a administrator powinien mieć plan szybkiej reakcji, gdy pojawią się błędy 504.

Błąd HTTP 504 gateway timeout jest złożony i wieloprzyczynowy, ale dzięki systematycznej diagnozie oraz odpowiednim działaniom większość przypadków da się skutecznie opanować. Proaktywne monitorowanie, testowanie i optymalizacja znacząco ograniczają częstotliwość i dotkliwość 504, poprawiając doświadczenie użytkownika i stabilność pozycji w wynikach wyszukiwania.