503 Service Unavailable: přetížení, nebo údržba?
· 6 min čtení
Co chyba znamená
503 je webový server, který říká „jsem tu, ale právě teď vás nemohu obsloužit“. Na rozdíl od 502 nemusí být nic za ním rozbité. Server posílá 503 záměrně ve třech situacích: je v režimu údržby, narazil na limit, který má dodržovat (spojení, pracovníci, šířka pásma, rate limit), nebo je tak přetížený, že zahazuje požadavky, aby přežil. 503 může nést hlavičku Retry-After, která klientům říká, kdy se mají vrátit; vyhledávače krátké 503 považují za dočasné a stránku nevyřazují.
Časté příčiny
- Zapomenutý režim údržby. WordPress při aktualizacích zapisuje soubor
.maintenancea odpovídá 503, dokud aktualizace neskončí. Pokud je aktualizace přerušena, soubor zůstane a s ním i chyba. Laravel, Magento, Drupal a většina frameworků má ekvivalentní přepínač. - Přetížení. Více požadavků, než zvládnou nakonfigurovaní pracovníci. Dosažený
MaxRequestWorkersv Apache, vyčerpanýpm.max_childrenv PHP-FPM nebo databáze tak pomalá, že každý pracovník čeká. - Limit hostingu. Sdílený hosting omezuje sekundy CPU, souběžné procesy nebo „entry processes“ na účet. Když limit překročíte, brána poskytovatele odpovídá 503 jen pro váš web.
- Backend vyřazený z rotace. Za load balancerem nebo CDN znamená 503, že všechny backendy neprošly kontrolou stavu. Cloudflare zobrazí vlastní stránku 503, když je původní server přetížený nebo omezený rate limitem.
- Boti a scrapery. Crawler stahující tisíce stránek nebo útok hrubou silou na
wp-login.phpčixmlrpc.phpvyčerpá pracovníky a legitimní návštěvníci dostanou 503. - Plný disk nebo vyčerpaná paměť. Služba běží, ale nemůže zapisovat relace, soubory cache ani logy a některé aplikace v tom stavu odpovídají 503.
Pokud jste návštěvník
Počkejte minutu a načtěte stránku znovu; 503 je obvykle krátká. Pokud web zůstává na 503 hodiny, má majitel zaseknutý režim údržby nebo problém s kapacitou a jen on to může opravit.
Pokud jde o váš web: nejdřív zkontrolujte
Spusťte kontrolu dostupnosti webu, abyste 503 potvrdili zvenčí a viděli, zda ji poslala CDN, nebo váš vlastní server. Pak se rozhodněte: spustili jste vy nebo váš CMS v posledních minutách aktualizaci? Pokud ano, je to režim údržby. Pokud ne, je to kapacita.
Na vlastním serveru:
# is the web server up at all?
systemctl status nginx
systemctl status apache2
# load, memory, disk: the three numbers behind most 503s
uptime
free -m
df -h
# who is hammering the site right now?
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Průměrná zátěž daleko nad počtem jader CPU, méně než 100 MB volné paměti nebo jediná IP s tisíci požadavků za posledních několik minut každé z toho vysvětluje 503.
Opravy na vlastním serveru
1. Ukončete zaseknutý režim údržby
WordPress: smažte soubor .maintenance v kořeni webu a pak web otevřete. Pokud byla aktualizace, která ho vytvořila, přerušena, může být plugin nebo jádro nainstalováno jen napůl; spusťte aktualizaci znovu z administrace nebo pomocí WP-CLI:
rm /var/www/example.com/.maintenance
wp core verify-checksums
wp plugin update --all
Laravel: php artisan up. Magento: bin/magento maintenance:disable. Drupal: nastavte $settings['maintenance_mode'] na false nebo použijte drush state:set system.maintenance_mode 0.
2. Zastavte záplavu
Zablokujte problematickou IP nebo síť a pak přidejte rate limit, aby to příště nemohl udělat nikdo další.
# block one address (Debian/Ubuntu with ufw)
sudo ufw deny from 203.0.113.45
# or with nftables
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
Rate limit v nginx pro přihlašovací stránky (v bloku http, pak v bloku server):
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Apache: mod_evasive nebo mod_qos dělají totéž; fail2ban s jaily apache-badbots a wordpress opakované útočníky blokuje automaticky.
3. Dejte serveru kapacitu
Pokud je zátěž skutečný provoz, ne zneužití, zvyšte limity pracovníků v mezích, které paměť dovolí. Apache (mpm_event): MaxRequestWorkers. PHP-FPM: pm.max_children. Nejdřív zkontrolujte paměť na pracovníka: ps -ylC php-fpm8.3 --sort:rss. Pak otestujte a načtěte znovu:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Zapněte cachování stránek (WordPress: plugin pro cache nebo FastCGI cache v nginx), aby špička už nespouštěla PHP při každém požadavku. Stránka z cache stojí zlomek milisekundy; stránka WordPressu bez cache stojí stovky.
4. Uvolněte disk
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
Staré soubory logů, zálohy uložené na stejném disku a utíkající ladicí log jsou obvyklí podezřelí.
5. Za load balancerem
Selhání kontroly stavu u všech backendů najednou obvykle znamená, že je rozbitá samotná kontrolní URL (smazaná stránka pro kontrolu stavu, přesměrování na HTTPS, které kontrola nenásleduje), a ne všechny backendy. Načtěte kontrolní URL ručně z balanceru.
Když je to problém poskytovatele hostingu
Na sdíleném hostingu limity zvýšit nemůžete. Zeptejte se poskytovatele, na jaký limit jste narazili a zda je to váš provoz, nebo jiný účet na stejném serveru:
Dobrý den, můj web example.com odpovídá „503 Service Unavailable“ přibližně od 09:10 UTC. Nespustil jsem aktualizaci a web není v režimu údržby. Mohli byste mi sdělit, zda můj účet narazil na limit zdrojů (CPU, procesy, paměť), nebo zda je server přetížený, a jaká jsou čísla? Pokud jde o můj účet, který limit a od kdy?
Pokud je odpověď „váš účet pravidelně naráží na limity“, buď web pořádně cachujte, nebo přejděte na plán či server s větší kapacitou.
Jak předejít dalšímu
503 se ohlašuje: zátěž pomalu stoupá, dochází paměť, jedna IP začne zaplavovat. Kontroly webu zachytí 503 do minuty; serverový agent ukáže zátěž, paměť a disk dřív, než to dojde tak daleko. Na vlastním serveru Quick Fix za pevnou cenu uvolní místo na disku a restartuje zaseknutou službu a Deep Fix nastaví rate limity a cachování, aby server příště zůstal v provozu.
Co dál
Zkontrolujte to zvenčí
Nejede web pro všechny, nebo jen pro vás, a co server odpovídá? Zdarma, bez registrace.
Kontrola dostupnosti webuVýpadek? Zasáhneme.
Na vlastním serveru nebo ve webhostingu s přístupem přes SSH: Quick Fix za pevnou cenu pro běžné příčiny, Deep Fix účtovaný po 15minutových blocích pro zbytek, nonstop. Cena před objednáním.
Nechat opravitDalší průvodci
- Váš web nejede. Co dělat v prvních 15 minutách.
- Server nejede: co zkontrolovat jako první a v jakém pořadí
- 502 Bad Gateway: příčiny a jak to opravit
- 504 Gateway Timeout: co znamená a jak to opravit
- DNS_PROBE_FINISHED_NXDOMAIN: příčiny a opravy
- ERR_CONNECTION_REFUSED: příčiny a jak to opravit
- „Vaše připojení není soukromé“: varování o SSL certifikátu