Vysvětlení stavových kódů 5xx: kdy je problém na vašem serveru
Stavový kód 5xx znamená, že selhala vaše infrastruktura, ne požadavek návštěvníka. Server požadavek přijal, pochopil, a pak nedokázal vytvořit platnou odpověď, takže každé 5xx na vašem webu je incident, který patří vám.
Co odděluje 5xx od 4xx
RFC 9110 definuje 5xx jako "Server Error": server si je vědom, že pochybil, nebo není schopen vykonat požadovanou metodu. To je celý rozdíl. 404 říká "tady nic není". 500 říká "tady něco je a při vytváření toho jsem se rozbil".
Z toho plynou dva důsledky. Zaprvé, 5xx lze obvykle zopakovat, protože stejný požadavek klidně může o vteřinu později uspět, jakmile se selhávající komponenta zotaví. Zadruhé, vyhledávače berou 5xx jako dočasný signál a zpomalí procházení místo okamžitého odindexování, zatímco trvalé 5xx trvající dny vás nakonec stojí indexované stránky.
Který krok selhal
Čtěte kód 5xx jako mapu toho, kde požadavek zemřel. Téměř každý moderní web má před aplikací aspoň jednu proxy, takže kód vám řekne, na které straně této hranice k selhání došlo.
| Kód | Kdo ho vygeneroval | Co se stalo |
|---|---|---|
| 500 Internal Server Error | Samotná aplikace | Nezachycená výjimka nebo neočekávaný stav uvnitř aplikace |
| 501 Not Implemented | Server | Metoda požadavku vůbec není podporovaná |
| 502 Bad Gateway | Proxy, CDN nebo load balancer | Backend odpověděl, ale něčím neplatným, nebo spojení uzavřel |
| 503 Service Unavailable | Server nebo proxy, záměrně | Přetížený nebo v údržbě, a práci úmyslně odmítá |
| 504 Gateway Timeout | Proxy, CDN nebo load balancer | Backend nikdy včas neodpověděl |
| 505 HTTP Version Not Supported | Server | Verze protokolu v požadavku není podporovaná |
502, 503 a 504 nesou nejvíc diagnostické hodnoty, protože každé pojmenovává jiné selhání téhož backendu: neplatná odpověď, odmítnutá odpověď, žádná odpověď. Návod na 502 Bad Gateway pokrývá první z nich do hloubky, včetně řádků logu proxy, které identifikují přesnou poruchu.
Běžné příčiny za odpověďmi 5xx
- Pády aplikace. Nezachycená výjimka, selhané databázové spojení nebo hodnota null na neočekávaném místě vygeneruje 500 na jakékoli trase, která se dotkne rozbité cesty kódu.
- Backendový proces neběží. Zastavený aplikační server, mrtvý pool PHP-FPM, nebo kontejner, který selhal v health checku, dá proxy nikoho, s kým by mluvila, což se projeví jako 502.
- Vyčerpání zdrojů. Došlá paměť, došlé popisovače souborů, došlá pracovní vlákna, nebo došlá databázová spojení. Obvykle to začíná jako přerušované chyby pod zátěží, než se to stane trvalým.
- Pomalé závislosti. Pomalý dotaz, pomalé API třetí strany, nebo studený start posune dobu odezvy za časový limit proxy a promění se ve 504.
- Nasazení a restarty. Jakékoli okno, kdy starý proces zastavil a nový ještě nezačal obsluhovat, vygeneruje nápor 502 nebo 503.
- Chyby konfigurace. Špatná adresa upstreamu, špatné nastavení TLS mezi proxy a backendem, nebo neshoda protokolu, jako mluvení HTTP na portu HTTPS.
- Plný disk. Podceňovaná příčina. Logy nebo dočasné soubory zaplní svazek, relace nebo cache přestanou zapisovat, a aplikace začne selhávat způsobem, který vypadá náhodně.
Jak projít 5xx
- Potvrďte kód a jeho původ. Stáhněte hlavičky přímo a podívejte se, která komponenta odpověď podepsala:
Hlavičkacurl -sS -o /dev/null -D - https://example.com/Server:nebo hlavička CDN na chybě vám řekne, zda ji vygeneroval okraj, nebo původní server. - Otestujte původní server přímo, mimo proxy. Pokud backend na vlastním portu odpoví 200, zatímco veřejná URL odpoví 502, porucha je ve vrstvě proxy nebo na spojení mezi nimi.
- Dál čtěte chybový log proxy, ne log aplikace. Reverzní proxy pojmenovávají selhání přesně, například
connect() failed (111: Connection refused)neboupstream timed out, což okamžitě odliší "backend je dole" od "backend je pomalý". - Pak čtěte log aplikace. U 500 je stack trace odpovědí. U 502 a 504 aplikace často nezaloguje vůbec nic, a tato absence je sama o sobě informativní.
- Zkontrolujte zdroje na hostiteli. Paměť, disk, počty spojení a nasycení pracovních procesů. Přerušované 5xx pod provozem je téměř vždy dosažený limit.
- Podívejte se, co se změnilo. Nasazení, změny konfigurace, obnovy certifikátů a aktualizace závislostí tvoří velkou část náhlých vzniků 5xx.
Zachycení přerušovaných chyb 5xx
Chyby 5xx jsou často přerušované, což je dělá těžko zachytitelné ručně: stránka, kterou obnovíte, funguje, a ta, kterou načetl váš zákazník, nefungovala. Naplánovaná HTTP kontrola běží nepřetržitě a vzorkuje web mnohem častěji, než dokážete vy, takže se série chyb stane viditelnou jako vzorec místo roztroušených stížností. Kontrola z mnoha lokalit taky odliší skutečnou poruchu serveru od problému se směrováním nebo okrajem, který postihuje jen část světa, a proto distribuovaný monitoring dostupnosti používá kontrolní body rozprostřené napříč regiony místo jediného stanoviště. Pokud se selhávající kód ukáže být místo toho 403, 404 nebo 429, požadavek se nikdy nedostal k rozbitému backendu, a správným výchozím bodem je návod na rodinu 4xx.