503 Service Unavailable: ylikuormitus vai huolto?
· 5 min lukuaika
Mitä virhe tarkoittaa
503 on verkkopalvelin, joka sanoo: ”Olen täällä, mutta en pysty palvelemaan sinua juuri nyt.” Toisin kuin 502, mikään sen takana ei välttämättä ole rikki. Palvelin lähettää 503:n tarkoituksella kolmessa tilanteessa: se on huoltotilassa, se on saavuttanut rajan, jota sen on käsketty noudattaa (yhteydet, työprosessit, kaistanleveys, pyyntöraja), tai se on niin ylikuormitettu, että karsii pyyntöjä pysyäkseen hengissä. 503 voi sisältää Retry-After-otsakkeen, joka kertoo asiakkaille, milloin palata; hakukoneet pitävät lyhyttä 503:a tilapäisenä eivätkä pudota sivua.
Yleiset syyt
- Huoltotila jäi päälle. WordPress kirjoittaa päivitysten aikana
.maintenance-tiedoston ja vastaa 503:lla, kunnes päivitys päättyy. Jos päivitys keskeytyy, tiedosto jää, ja virhe sen mukana. Laravelissa, Magentossa, Drupalissa ja useimmissa kehyksissä on vastaava kytkin. - Ylikuorma. Enemmän pyyntöjä kuin määritetyt työprosessit jaksavat käsitellä. Apachen
MaxRequestWorkerssaavutettu, PHP-FPM:npm.max_childrenkäytetty loppuun tai tietokanta niin hidas, että jokainen työprosessi odottaa. - Hostingin raja. Jaetut hostingit rajoittavat suoritinsekunteja, samanaikaisia prosesseja tai ”entry processes” -prosesseja tiliä kohti. Kun raja tulee vastaan, palveluntarjoajan yhdyskäytävä vastaa 503:lla vain sinun sivustollesi.
- Taustajärjestelmä poistettu kierrosta. Kuormantasaajan tai CDN:n takana 503 tarkoittaa, että kaikki taustajärjestelmät epäonnistuivat terveystarkistuksessa. Cloudflare näyttää oman 503-sivunsa, kun alkuperäispalvelin on ylikuormitettu tai pyyntörajoitettu.
- Botit ja kaapijat. Indeksoija, joka hakee tuhansia sivuja, tai raa'an voiman hyökkäys tiedostoon
wp-login.phptaixmlrpc.phpkuluttaa työprosessit loppuun, ja lailliset kävijät saavat 503:n. - Täysi levy tai loppunut muisti. Palvelu on pystyssä mutta ei voi kirjoittaa istuntoja, välimuistitiedostoja tai lokeja, ja jotkin sovellukset vastaavat tässä tilassa 503:lla.
Jos olet kävijä
Odota minuutti ja lataa uudelleen; 503 on yleensä lyhyt. Jos sivusto pysyy 503:ssa tunteja, omistajalla on jumiutunut huoltotila tai kapasiteettiongelma, ja vain hän voi korjata sen.
Jos kyse on sinun sivustostasi: tarkista ensin
Aja sivuston saatavuuden tarkistin vahvistaaksesi 503:n ulkoa ja nähdäksesi, lähettikö sen CDN vai oma palvelimesi. Päätä sitten: aloititko tai aloittiko sisällönhallintajärjestelmäsi päivityksen viime minuutteina? Jos kyllä, kyse on huoltotilasta. Jos ei, kyse on kapasiteetista.
Omalla palvelimellasi:
# onko verkkopalvelin pystyssä lainkaan?
systemctl status nginx
systemctl status apache2
# kuorma, muisti, levy: kolme lukua useimpien 503:ien takana
uptime
free -m
df -h
# kuka vasaroi sivustoa juuri nyt?
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Kuormakeskiarvo, joka on selvästi suorittimen ytimien määrää suurempi, alle 100 Mt vapaata muistia tai yksittäinen IP-osoite tuhansilla pyynnöillä viime minuuttien aikana selittää kukin 503:n.
Korjaukset omalla palvelimella
1. Lopeta jumiutunut huoltotila
WordPress: poista .maintenance-tiedosto sivuston juuresta ja avaa sivusto. Jos sen luonut päivitys keskeytyi, lisäosa tai ydin voi olla puoliksi asennettu; aja päivitys uudelleen hallintapaneelista tai WP-CLI:llä:
rm /var/www/example.com/.maintenance
wp core verify-checksums
wp plugin update --all
Laravel: php artisan up. Magento: bin/magento maintenance:disable. Drupal: aseta $settings['maintenance_mode'] arvoon false tai käytä komentoa drush state:set system.maintenance_mode 0.
2. Pysäytä tulva
Estä loukkaava IP-osoite tai verkko ja lisää sitten pyyntöraja, jotta seuraava ei pääse tekemään samaa.
# estä yksi osoite (Debian/Ubuntu ufw:llä)
sudo ufw deny from 203.0.113.45
# tai nftablesilla
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
nginxin pyyntöraja kirjautumissivuille (http-lohkossa, sitten server-lohkossa):
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 tai mod_qos tekevät saman; fail2ban apache-badbots- ja wordpress-jaileilla estää toistuvat häiriköt automaattisesti.
3. Anna palvelimelle kapasiteettia
Jos kuorma on aitoa liikennettä eikä väärinkäyttöä, nosta työprosessien rajoja muistin sallimissa rajoissa. Apache (mpm_event): MaxRequestWorkers. PHP-FPM: pm.max_children. Tarkista ensin muisti työprosessia kohti: ps -ylC php-fpm8.3 --sort:rss. Testaa ja lataa sitten uudelleen:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Ota sivun välimuisti käyttöön (WordPress: välimuistilisäosa tai FastCGI-välimuisti nginxissä), jotta piikki ei enää aja PHP:tä jokaiselle pyynnölle. Välimuistissa oleva sivu maksaa murto-osan millisekunnista; WordPress-sivu ilman välimuistia maksaa satoja.
4. Vapauta levytilaa
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
Vanhat lokitiedostot, samalle levylle jätetyt varmuuskopiot ja karannut debug-loki ovat tavallisia epäiltyjä.
5. Kuormantasaajan takana
Se, että kaikki taustajärjestelmät epäonnistuvat terveystarkistuksessa kerralla, tarkoittaa yleensä, että tarkistus-URL itse on rikki (poistettu terveyssivu, uudelleenohjaus HTTPS:ään, jota tarkistin ei seuraa) eikä jokainen taustajärjestelmä. Hae terveys-URL käsin kuormantasaajalta.
Kun ongelma on palveluntarjoajan
Jaetussa hostingissa rajoja ei voi nostaa. Kysy palveluntarjoajalta, minkä rajan saavutit ja onko kyse sinun liikenteestäsi vai toisesta samalla palvelimella olevasta tilistä:
Hei, verkkosivustoni example.com vastaa ”503 Service Unavailable” noin klo 9.10 UTC alkaen. En ole aloittanut päivitystä, eikä sivusto ole huoltotilassa. Pyydän kertomaan, saavuttiko tilini resurssirajan (suoritin, prosessit, muisti) vai onko palvelin ylikuormitettu, ja mitkä luvut ovat. Jos kyse on tilistäni, mikä raja ja mistä alkaen?
Jos vastaus on säännöllisesti ”tilisi saavutti rajansa”, joko välimuistita sivusto kunnolla tai siirry pakettiin tai palvelimeen, jossa on enemmän kapasiteettia.
Seuraavan ehkäiseminen
503 ilmoittaa itsestään: kuorma nousee hiljalleen, muisti loppuu, yksi IP-osoite alkaa tulvia. Verkkosivutarkistukset havaitsevat 503:n minuutissa; palvelinagentti näyttää kuorman, muistin ja levyn ennen kuin päästään niin pitkälle. Omalla palvelimellasi Quick Fix vapauttaa levytilaa ja käynnistää jumiutuneen palvelun uudelleen kiinteään hintaan, ja Deep Fix ottaa käyttöön pyyntörajat ja välimuistin, jotta palvelin pysyy pystyssä ensi kerralla.
Mitä seuraavaksi
Tarkista se ulkoa
Onko sivusto alhaalla kaikille vai vain sinulle, ja mitä palvelin vastaa? Ilmainen, ei rekisteröitymistä.
Sivuston saatavuuden tarkistinAlhaalla? Hoidamme sen.
Omalla palvelimellasi tai webtilassa, johon on SSH-pääsy: Quick Fix kiinteään hintaan yleisiin syihin, Deep Fix 15 minuutin jaksoissa laskutettuna loppuun, kellon ympäri. Hinta ennen tilausta.
Tilaa korjausLisää oppaita
- Verkkosivustosi on alhaalla. Näin toimit ensimmäisten 15 minuutin aikana.
- Palvelin alhaalla: mitä tarkistaa ensin ja missä järjestyksessä
- 502 Bad Gateway: syyt ja korjaus
- 504 Gateway Timeout: mitä se tarkoittaa ja miten sen korjaa
- DNS_PROBE_FINISHED_NXDOMAIN: syyt ja korjaukset
- ERR_CONNECTION_REFUSED: syyt ja korjaus
- ”Yhteytesi ei ole yksityinen”: SSL-varmenteen varoitus