Chyba 503 Service Unavailable: preťaženie alebo údržba?
· 6 min čítania
Čo chyba znamená
503 je webový server, ktorý hovorí „som tu, ale práve teraz vás nemôžem obslúžiť“. Na rozdiel od 502 nemusí byť za ním nič pokazené. Server posiela 503 zámerne v troch situáciách: je v režime údržby, narazil na limit, ktorý má dodržiavať (spojenia, workeri, šírka pásma, rate limit), alebo je taký preťažený, že zahadzuje požiadavky, aby prežil. 503 môže niesť hlavičku Retry-After, ktorá klientom hovorí, kedy sa vrátiť; vyhľadávače považujú krátke 503 za dočasné a stránku nevyraďujú.
Bežné príčiny
- Zostal zapnutý režim údržby. WordPress počas aktualizácií zapisuje súbor
.maintenancea odpovedá 503, kým aktualizácia neskončí. Ak sa aktualizácia preruší, súbor zostane a s ním aj chyba. Laravel, Magento, Drupal a väčšina frameworkov majú ekvivalentný prepínač. - Preťaženie. Viac požiadaviek, než zvládnu nastavení workeri. Dosiahnuté
MaxRequestWorkersv Apache, vyčerpanépm.max_childrenv PHP-FPM alebo databáza taká pomalá, že každý worker čaká. - Limit hostingu. Zdieľané hostingy obmedzujú sekundy CPU, súbežné procesy alebo „entry processes“ na účet. Keď narazíte na limit, brána poskytovateľa odpovie 503 len pre váš web.
- Backend vyradený z rotácie. Za load balancerom alebo CDN znamená 503, že všetky backendy zlyhali v kontrole stavu (health check). Cloudflare zobrazí vlastnú stránku 503, keď je pôvodný server preťažený alebo obmedzený rate limitom.
- Boty a scrapery. Prehľadávač sťahujúci tisíce stránok alebo útok hrubou silou na
wp-login.phpčixmlrpc.phpvyčerpá workerov a legitímni návštevníci dostanú 503. - Plný disk alebo vyčerpaná pamäť. Služba beží, ale nedokáže zapisovať relácie, súbory cache ani logy a niektoré aplikácie v tomto stave odpovedajú 503.
Ak ste návštevník
Počkajte minútu a načítajte stránku znova; 503 je zvyčajne krátka. Ak web zostane na 503 celé hodiny, majiteľ má zaseknutý režim údržby alebo problém s kapacitou a opraviť to môže len on.
Ak ide o váš web: najprv skontrolujte
Spustite kontrolu dostupnosti webu, aby ste 503 potvrdili zvonku a videli, či ju poslal CDN alebo váš vlastný server. Potom sa rozhodnite: spustili ste vy alebo váš CMS v posledných minútach aktualizáciu? Ak áno, ide o režim údržby. Ak nie, je to kapacita.
Na vlastnom serveri:
# beží webový server vôbec?
systemctl status nginx
systemctl status apache2
# záťaž, pamäť, disk: tri čísla za väčšinou 503
uptime
free -m
df -h
# kto práve bombarduje web?
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Priemerná záťaž ďaleko nad počtom jadier CPU, menej než 100 MB voľnej pamäte alebo jedna IP s tisíckami požiadaviek za posledné minúty, každé z toho vysvetlí 503.
Opravy na vlastnom serveri
1. Ukončite zaseknutý režim údržby
WordPress: zmažte súbor .maintenance v koreni webu a potom web otvorte. Ak sa aktualizácia, ktorá ho vytvorila, prerušila, plugin alebo jadro môže byť nainštalované len napoly; spustite aktualizáciu znova z administrácie alebo cez 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 alebo použite drush state:set system.maintenance_mode 0.
2. Zastavte záplavu
Zablokujte problematickú IP alebo sieť a potom pridajte rate limit, aby to ďalší už nedokázal.
# zablokovať jednu adresu (Debian/Ubuntu s ufw)
sudo ufw deny from 203.0.113.45
# alebo s nftables
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
Rate limit v nginx pre prihlasovacie stránky (v bloku http, potom 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 alebo mod_qos robia to isté; fail2ban s väzbami apache-badbots a wordpress blokuje opakovaných páchateľov automaticky.
3. Dajte serveru kapacitu
Ak je záťaž skutočná návštevnosť, nie zneužitie, zvýšte limity workerov v medziach, ktoré pamäť dovolí. Apache (mpm_event): MaxRequestWorkers. PHP-FPM: pm.max_children. Najprv skontrolujte pamäť na workera: ps -ylC php-fpm8.3 --sort:rss. Potom otestujte a znova načítajte:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Zapnite cache stránok (WordPress: plugin na cache alebo FastCGI cache v nginx), aby špička už nespúšťala PHP pri každej požiadavke. Stránka z cache stojí zlomok milisekundy; stránka WordPressu bez cache stovky.
4. Uvoľnite disk
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
Staré súbory logov, zálohy uložené na tom istom disku a splašený ladiaci log sú obvyklí podozriví.
5. Za load balancerom
Keď všetky backendy naraz zlyhajú v kontrole stavu, zvyčajne je pokazená samotná adresa kontroly (zmazaná stránka health, presmerovanie na HTTPS, ktoré kontrola nenásleduje), nie každý backend. Načítajte adresu health ručne z balanceru.
Keď je to problém vášho poskytovateľa
Na zdieľanom hostingu limity zvýšiť nemôžete. Spýtajte sa poskytovateľa, na aký limit ste narazili a či je to vaša návštevnosť alebo iný účet na tom istom serveri:
Dobrý deň, môj web example.com odpovedá „503 Service Unavailable“ približne od 09:10 UTC. Nespustil som aktualizáciu a web nie je v režime údržby. Mohli by ste mi povedať, či môj účet narazil na limit zdrojov (CPU, procesy, pamäť) alebo či je server preťažený, a aké sú čísla? Ak ide o môj účet, ktorý limit a odkedy?
Ak je odpoveď pravidelne „váš účet narazil na limity“, buď web poriadne cachujte, alebo prejdite na tarif či server s väčšou kapacitou.
Ako predísť ďalšej
503 sa ohlasuje vopred: záťaž pomaly stúpa, pamäť dochádza, jedna IP začne zaplavovať. Kontroly webu zachytia 503 do minúty; serverový agent ukáže záťaž, pamäť a disk skôr, než to zájde tak ďaleko. Na vlastnom serveri Quick Fix uvoľní miesto na disku a reštartuje zaseknutú službu za pevnú cenu a Deep Fix nastaví rate limity a cache, aby server nabudúce vydržal.
Čo ďalej
Skontrolujte to zvonku
Je web nedostupný pre všetkých alebo len pre vás a čo server odpovedá? Zdarma, bez registrácie.
Kontrola dostupnosti webuNefunguje? Zasiahneme.
Na vlastnom serveri alebo vo webhostingu s prístupom cez SSH: Quick Fix za pevnú cenu pri bežných príčinách, Deep Fix účtovaný po 15-minútových blokoch pri ostatných, nepretržite. Cena pred objednaním.
Nechať to opraviťĎalšie návody
- Váš web nefunguje. Čo robiť v prvých 15 minútach.
- Server nefunguje: čo skontrolovať ako prvé a v akom poradí
- Chyba 502 Bad Gateway: príčiny a oprava
- Chyba 504 Gateway Timeout: čo znamená a ako ju opraviť
- DNS_PROBE_FINISHED_NXDOMAIN: príčiny a opravy
- ERR_CONNECTION_REFUSED: príčiny a oprava
- „Vaše pripojenie nie je súkromné“: varovanie o SSL certifikáte