Błąd HTTP 503 Service Unavailable: Przyczyny i sposoby naprawy

Czym jest błąd HTTP 503?
Błąd HTTP 503 (Service Unavailable) to kod statusu po stronie serwera, który oznacza, że serwer WWW tymczasowo nie może przetworzyć Twojego żądania. W odróżnieniu od błędu 404 (strona nie znaleziona) czy 500 (wewnętrzny błąd serwera), kod 503 wskazuje konkretnie na stan tymczasowy — serwer istnieje i jest osiągalny, ale w tej chwili nie może serwować treści.
Zgodnie ze specyfikacją HTTP (RFC 9110) serwer MOŻE dołączyć nagłówek Retry-After, który informuje klienta, jak długo powinien czekać przed ponowną próbą. Ten nagłówek informuje przeglądarki, roboty wyszukiwarek i klientów API, kiedy usługa powinna być ponownie dostępna.
Kluczowe słowo to 'tymczasowy'. Prawidłowo skonfigurowana odpowiedź 503 mówi Google i innym wyszukiwarkom, aby wróciły później, zamiast usuwać stronę z indeksu. Dlatego właśnie strony używają kodu 503 podczas planowanej konserwacji — chroni to pozycje SEO.
Jak wygląda błąd 503
Niezależnie od treści komunikatu, przyczyna jest zawsze taka sama: serwer otrzymał Twoje żądanie, ale w tej chwili nie może go zrealizować.
503 Service Unavailable
503 Service Temporarily Unavailable
HTTP Error 503. The service is unavailable.
Error 503 Backend Fetch Failed (pamięć podręczna Varnish)
503 Service Unavailable — No server is available to handle this request (Apache)
503 Service Temporarily Unavailable — nginx (Nginx)
Error 503 (Service Unavailable)!! 1 (błąd pochodzenia Cloudflare)
Site is temporarily unavailable lub Briefly unavailable for scheduled maintenance (WordPress)
Najczęstsze przyczyny błędu HTTP 503
Zrozumienie przyczyny to najszybsza droga do rozwiązania problemu. Oto najczęstsze powody, dla których serwer zwraca 503, uszeregowane według częstotliwości.
Przeciążenie serwera — Serwer osiągnął limit CPU, RAM lub połączeń. Dzieje się tak podczas skoków ruchu, viralowych treści lub gdy boty agresywnie indeksują stronę.
Planowana konserwacja — Administrator strony celowo wyłączył serwer na czas aktualizacji, migracji lub wdrożeń. Prawidłowo skonfigurowane strony konserwacyjne zwracają 503 z nagłówkiem Retry-After.
Wadliwa wtyczka lub motyw — Na platformach CMS takich jak WordPress, Joomla czy Magento, błędna wtyczka, konflikt z aktualizacją motywu lub niekompatybilna wersja PHP może spowodować awarię aplikacji i wywołać błąd 503.
Awaria PHP-FPM lub aplikacji — Menedżer procesów PHP (php-fpm) wyczerpał procesy robocze lub backend aplikacji (Node.js, Python, Ruby) uległ awarii. Serwer WWW (Nginx/Apache) nadal działa, ale nie ma backendu, do którego mógłby przekazać żądania.
Przeciążenie bazy danych — Baza danych (MySQL, PostgreSQL) osiągnęła limit połączeń, zabrakło pamięci lub jest zablokowana przez długo trwające zapytanie. Aplikacja nie może pobrać danych i zwraca 503.
Atak DDoS — Rozproszony atak typu denial-of-service zasypuje serwer żądaniami, wyczerpując zasoby i powodując, że legalne żądania kończą się błędem 503.
Błędna konfiguracja DNS lub CDN — Cloudflare, AWS CloudFront lub inny CDN nie może dotrzeć do serwera źródłowego z powodu zmian DNS, wygasłego SSL lub problemów z białą listą IP.
Osiągnięcie limitów zasobów — Plany hostingu współdzielonego mają ścisłe limity CPU, RAM i jednoczesnych połączeń. Przekroczenie tych limitów powoduje, że dostawca hostingu dławi lub blokuje żądania kodem 503.
Rozwiązanie dla odwiedzających: Co możesz zrobić
Jeśli jako odwiedzający widzisz błąd 503 na czyjejś stronie, problem leży po stronie serwera — nie Twojego urządzenia. Jest jednak kilka rzeczy, które możesz spróbować.
Poczekaj i odśwież — Ponieważ 503 jest tymczasowy, odczekaj 30-60 sekund i odśwież stronę. Serwer może właśnie się restartować lub kończyć wdrożenie.
Sprawdź, czy strona jest niedostępna dla wszystkich — Użyj narzędzia HTTP Headers DNS Robot, aby sprawdzić kod odpowiedzi serwera z zewnętrznego serwera. Jeśli zwraca 503 dla wszystkich, strona faktycznie nie działa.
Wyczyść pamięć podręczną przeglądarki — W rzadkich przypadkach przeglądarka mogła zapisać stronę z błędem 503 w pamięci podręcznej. Wyczyść pamięć podręczną i spróbuj ponownie.
Wypróbuj inną przeglądarkę lub urządzenie — Wyklucz problemy z pamięcią podręczną lub rozszerzeniami specyficznymi dla przeglądarki.
Sprawdź media społecznościowe strony — Witryna mogła opublikować informację o planowanej konserwacji lub znanej awarii na X (Twitter) lub na swojej stronie statusu.
Rozwiązanie 1: Zrestartuj serwer WWW
Po restarcie natychmiast przetestuj stronę. Jeśli błąd 503 powróci w ciągu kilku minut, przyczyna nadal istnieje — przejdź do sprawdzania logów i zasobów.
# Restart Nginx
sudo systemctl restart nginx
# Restart Apache
sudo systemctl restart apache2 # Debian/Ubuntu
sudo systemctl restart httpd # CentOS/RHEL
# Restart PHP-FPM
sudo systemctl restart php8.2-fpm # Adjust version as needed
# Restart Node.js (PM2)
pm2 restart all
# Restart entire server (last resort)
sudo rebootRozwiązanie 2: Sprawdź zasoby serwera (CPU, RAM, dysk)
Jeśli CPU lub RAM przekracza 90%, musisz zoptymalizować aplikację, zabić niekontrolowane procesy lub ulepszyć serwer. Jeśli dysk jest pełny, wyczyść pliki logów, stare kopie zapasowe lub pliki tymczasowe.
# Check CPU and memory usage
top -bn1 | head -20
# Check disk space
df -h
# Check memory in detail
free -m
# Check active connections
ss -s
# Find processes using the most memory
ps aux --sort=-%mem | head -10
# Find processes using the most CPU
ps aux --sort=-%cpu | head -10Rozwiązanie 3: Sprawdź logi błędów
Typowe wpisy w logach powodujące 503:
"upstream timed out" lub "no live upstreams" (Nginx) — PHP-FPM lub aplikacja backendowa nie odpowiada. Zrestartuj php-fpm lub zwiększ limity czasu.
"server reached pm.max_children" (PHP-FPM) — Wszystkie procesy robocze PHP są zajęte. Zwiększ pm.max_children w konfiguracji puli PHP-FPM.
"Too many connections" (MySQL) — Limit połączeń bazy danych został wyczerpany. Zwiększ max_connections w konfiguracji MySQL lub zoptymalizuj zapytania.
"Cannot allocate memory" — Serwerowi brakuje RAM. Zakończ zbędne procesy lub dodaj przestrzeń swap.
# Nginx error log
tail -50 /var/log/nginx/error.log
# Apache error log
tail -50 /var/log/apache2/error.log # Debian/Ubuntu
tail -50 /var/log/httpd/error_log # CentOS/RHEL
# PHP-FPM log
tail -50 /var/log/php8.2-fpm.log
# WordPress debug log (if WP_DEBUG_LOG is enabled)
tail -50 /var/www/html/wp-content/debug.log
# System log
tail -50 /var/log/syslogRozwiązanie 4: Wyłącz wtyczki i motywy (WordPress / CMS)
Po zidentyfikowaniu wadliwej wtyczki zaktualizuj ją, zastąp alternatywą lub skontaktuj się z deweloperem. Sprawdź też, czy Twoja wersja PHP jest kompatybilna — niektóre wtyczki przestają działać po aktualizacji PHP na serwerze.
# Disable all plugins by renaming the plugins folder
cd /var/www/html/wp-content
mv plugins plugins_disabled
# If the site loads, rename it back and re-enable plugins one by one
mv plugins_disabled plugins
# To disable a single plugin
mv plugins/problem-plugin plugins/problem-plugin.disabledRozwiązanie 5: Zwiększ limity PHP i serwera
Jeśli na serwerze kończą się procesy robocze PHP lub osiąga on limity pamięci, musisz zwiększyć limity w konfiguracji.
# PHP-FPM pool config (e.g., /etc/php/8.2/fpm/pool.d/www.conf)
pm = dynamic
pm.max_children = 50 # Increase from default (5-10)
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
# PHP memory limit (php.ini)
memory_limit = 256M # Increase from default 128M
max_execution_time = 300 # Increase from default 30
# Restart PHP-FPM after changes
sudo systemctl restart php8.2-fpmRozwiązanie 6: Sprawdź konfigurację DNS i CDN
Aby zdiagnozować problem, użyj narzędzia DNS Lookup DNS Robot, by sprawdzić, czy Twoja domena wskazuje na właściwy IP. Użyj narzędzia HTTP Headers DNS Robot, aby sprawdzić, jaki kod statusu zwraca serwer. Jeśli DNS wskazuje na Cloudflare, ale IP Twojego serwera źródłowego się zmienił, zaktualizuj rekord A w panelu Cloudflare.
503 z brandingiem Cloudflare: Strona błędu ma logo Cloudflare — oznacza to, że centrum danych Cloudflare ma problem (rzadkie).
503 z serwera źródłowego przez Cloudflare: Strona błędu jest prosta lub ma projekt Twojej witryny — oznacza to, że Twój serwer źródłowy zwrócił 503, a Cloudflare go przepuścił.
Rozwiązanie 7: Sprawdź, czy nie ma ataku DDoS lub botów
Jeśli widzisz tysiące żądań z jednego IP lub małego zakresu adresów IP, zablokuj je na poziomie zapory sieciowej. W przypadku ataków DDoS na dużą skalę włącz tryb 'Under Attack Mode' Cloudflare lub skorzystaj z ochrony DDoS swojego dostawcy hostingu. Możesz użyć narzędzia IP Blacklist Checker DNS Robot, aby sprawdzić, czy atakujące adresy IP są już na znanych czarnych listach.
# Count requests per IP in the last 1000 lines
tail -1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# Check requests per second
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1-3 | uniq -c | sort -rn | head -10
# Block an abusive IP with iptables
sudo iptables -A INPUT -s 1.2.3.4 -j DROP
# Or block with Nginx
# Add to server block: deny 1.2.3.4;Rozwiązanie 8: Napraw problemy z połączeniem do bazy danych
Jeśli widzisz wiele uśpionych połączeń, Twoja aplikacja nie zamyka prawidłowo połączeń z bazą danych. Jeśli długo trwające zapytania blokują inne, zoptymalizuj te zapytania lub zakończ je, aby odblokować bazę danych.
# Check if MySQL/MariaDB is running
sudo systemctl status mysql
# Restart MySQL
sudo systemctl restart mysql
# Check current connections vs limit
mysql -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -e "SHOW VARIABLES LIKE 'max_connections';"
# Increase max connections (temporary)
mysql -e "SET GLOBAL max_connections = 200;"
# Check for long-running queries
mysql -e "SHOW PROCESSLIST;" | head -20Rozwiązanie 9: Skontaktuj się z dostawcą hostingu
Jeśli korzystasz z hostingu współdzielonego, zarządzanego hostingu WordPress lub platformy takiej jak Squarespace, Wix czy Shopify, możesz nie mieć dostępu do logów serwera ani możliwości restartowania usług. W takich przypadkach błąd 503 może być spowodowany infrastrukturą dostawcy hostingu.
Skontaktuj się z działem wsparcia swojego dostawcy hostingu i podaj:
Dokładny URL, który zwraca 503
Kiedy pojawił się błąd — zapisz datę i godzinę
Co się zmieniło — czy zainstalowałeś wtyczkę, zaktualizowałeś motyw lub zmieniłeś ustawienia DNS?
Czy błąd jest przerywany czy stały — przerywany 503 sugeruje limity zasobów; stały 503 sugeruje awarię lub błędną konfigurację
503 a inne błędy HTTP
Kluczowa różnica: 503 jest jawnie tymczasowy. Dobrze skonfigurowana odpowiedź 503 zawiera nagłówek Retry-After, który informuje klientów, kiedy dokładnie powinni wrócić. Google traktuje 503 inaczej niż 500 — ponowi próbę i zachowa Twoje pozycje w rankingu, jeśli przerwa jest krótka.
| Kod błędu | Nazwa | Znaczenie | Tymczasowy? |
|---|---|---|---|
| 500 | Internal Server Error | Serwer napotkał nieoczekiwany błąd (bug, awaria, błędna konfiguracja) | Być może |
| 502 | Bad Gateway | Proxy/load balancer otrzymał nieprawidłową odpowiedź od serwera nadrzędnego | Być może |
| 503 | Service Unavailable | Serwer działa, ale tymczasowo nie może obsłużyć żądań (przeciążenie, konserwacja) | Tak |
| 504 | Gateway Timeout | Proxy/load balancer nie otrzymał odpowiedzi od serwera nadrzędnego w wyznaczonym czasie | Być może |
| 520-530 | Błędy Cloudflare | Błędy specyficzne dla Cloudflare dotyczące problemów z połączeniem do serwera źródłowego | Różnie |
Jak zapobiegać błędom 503
Lepiej zapobiegać niż gasić pożary. Oto najlepsze praktyki, aby unikać błędów 503.
Monitoruj zasoby serwera — Ustaw alerty dla CPU > 80%, RAM > 85% i dysku > 90%. Narzędzia takie jak UptimeRobot, Pingdom lub Grafana zapewniają natychmiastowe powiadomienia.
Używaj CDN — Cloudflare, Fastly lub AWS CloudFront buforują zasoby statyczne i absorbują skoki ruchu, zmniejszając obciążenie serwera źródłowego.
Włącz buforowanie — Używaj Redis, Memcached lub Varnish do buforowania zapytań bazodanowych i wyrenderowanych stron. Użytkownicy WordPress: zainstaluj wtyczkę buforującą, taką jak WP Super Cache lub W3 Total Cache.
Automatyczne skalowanie — Jeśli korzystasz z hostingu w chmurze (AWS, GCP, Azure, DigitalOcean), skonfiguruj automatyczne skalowanie, aby dodawać więcej serwerów podczas skoków ruchu.
Ogranicz boty — Skonfiguruj Nginx lub Cloudflare, aby ograniczyć prędkość agresywnych robotów i scraperów, zanim przeciążą Twój serwer.
Optymalizuj zapytania bazodanowe — Wolne zapytania to przyczyna nr 1 błędów 503 związanych z bazą danych. Dodaj indeksy, optymalizuj złączenia i używaj buforowania zapytań.
Używaj odpowiedniej strony konserwacyjnej — Podczas wdrożeń zwracaj 503 z nagłówkiem
Retry-Afterzamiast pozwalać serwerowi się zawiesić. Chroni to SEO i informuje użytkowników.Aktualizuj oprogramowanie — Aktualizuj CMS, wtyczki, PHP i bazę danych do najnowszych stabilnych wersji, aby unikać znanych błędów i luk bezpieczeństwa.
Sprawdź, czy strona zwraca 503
Użyj darmowego narzędzia HTTP Headers DNS Robot, aby sprawdzić kod odpowiedzi HTTP, nagłówki i informacje o serwerze dowolnej strony. Natychmiast zobacz, czy witryna zwraca 503 Service Unavailable.
Try HTTP Headers CheckerFrequently Asked Questions
Błąd HTTP 503 (Service Unavailable) oznacza, że serwer WWW tymczasowo nie może obsłużyć Twojego żądania. Serwer jest osiągalny, ale przeciążony, w trakcie konserwacji lub jego aplikacja backendowa uległa awarii. Jest to stan tymczasowy — strona powinna wrócić do działania sama.