Chyba Cloudflare 522: connection timed out - příčiny a opravy
Chyba Cloudflare 522 znamená, že se Cloudflare pokusil otevřít TCP spojení k vašemu originu a v rámci svého časového limitu, přibližně 15 sekund, nedostal žádnou odpověď. Na rozdíl od odmítnutého spojení nic neřeklo ne; origin prostě včas neodpověděl.
Co znamená chyba 522
Každý proxírovaný požadavek začíná tím, že Cloudflare otevře TCP spojení k vašemu originu ještě předtím, než může poslat samotný HTTP požadavek. Chyba 522 nastane, když se tento handshake, TCP SYN a očekávaný SYN-ACK zpátky, nedokončí v rámci časového okna Cloudflare. Origin může být příliš přetížený na přijímání nových spojení, firewall může pakety potichu zahazovat místo toho, aby je odmítal, nebo může být přetížená síťová trasa mezi Cloudflare a originem.
To se liší od chyby 521, kde origin spojení aktivně odmítá, a od chyby 524, kde se TCP spojení povede, ale samotná HTTP odpověď včas nedorazí. Chyba 522 je konkrétně selhání ve fázi handshake, ještě předtím, než je vůbec odeslán jakýkoli HTTP požadavek.
Jak se chyba 522 projevuje
Návštěvníci vidí stránku Cloudflare "Error 522: connection timed out" s Ray ID. Požadavek curl proti doméně ukáže stejný stav zhruba po uplynutí časového limitu Cloudflare:
curl -I https://example.com
HTTP/2 522
Protože se TCP handshake nikdy nedokončil, k vaší aplikaci se nedostal žádný požadavek, takže logy aplikace jsou pro dané období selhání typicky prázdné. Podívejte se místo toho na metriky na úrovni spojení: zátěž a vytížení procesoru serveru v čase chyb, počet navázaných a čekajících spojení (ss -s nebo netstat -an | grep SYN_RECV) a logy firewallu nebo load balanceru kvůli zahozeným nebo filtrovaným paketům na daném portu.
Co způsobuje chybu 522
- Server originu je přetížený a nedokáže dost rychle přijímat nová spojení. Vysoké vytížení procesoru, plná fronta čekajících spojení nebo vyčerpaný pool workerů, to všechno tohle způsobuje.
- Firewall nebo bezpečnostní skupina potichu zahazuje SYN pakety Cloudflare místo toho, aby posílala TCP reset. Zahození vypadá z pohledu Cloudflare naprosto stejně jako pomalý nebo mrtvý server, zatímco reset by místo toho vyprodukoval chybu 521.
- Na originu je vypnutý TCP keepalive, což zvyšuje obrat spojení a pravděpodobnost, že nový handshake dopadne ve chvíli, kdy je server příliš zaneprázdněný na to, aby ho přijal.
- IP adresa originu není správně na seznamu povolených tam, kde síť vyžaduje explicitní seznam povolených místo obyčejného pravidla firewallu, takže se požadavky Cloudflare odfiltrují ještě předtím, než se dostanou k naslouchajícímu socketu.
- Přetížení sítě nebo ztráta paketů mezi Cloudflare a originem, běžnější u originů za spotřebitelským nebo silně přeprodaným hostingem.
522 vs 524
Oba kódy jsou timeouty, ale nastávají v jiné fázi požadavku. Chyba 522 nastává předtím, než je odeslán jakýkoli HTTP požadavek: samotný TCP handshake se nikdy nedokončí. Chyba 524 nastává potom: TCP spojení se povede a Cloudflare pošle HTTP požadavek, ale origin nepošle kompletní odpověď zpátky do 100 sekund. 524 obvykle ukazuje na pomalou aplikaci, například endpoint na generování reportů, pomalý databázový dotaz, nebo požadavek spuštěný cronem, který legitimně trvá minuty. Oprava 524 je téměř vždy zrychlit endpoint nebo přesunout pomalou práci z cyklu požadavek-odpověď do úlohy na pozadí, na jejíž výsledek se klient dotazuje; plány Cloudflare Enterprise umí pro konkrétní trasy i zvýšit limit 100 sekund, ale to řeší jen příznak, ne pomalý endpoint samotný.
Jak zjistit, čí je to chyba
522 má téměř vždy původ na originu nebo v jeho blízkosti, protože vlastní síť Cloudflare je vysoce dostupná a jen zřídka je zdrojem timeoutu handshake. Užitečná otázka je, jestli je origin úplně nedostupný, nebo jen bojuje pod zátěží z určitých regionů. Nejrychlejší způsob, jak to zjistit, je spustit HTTP kontrolu z několika míst najednou: HTTP kontrola HostTracker se dotazuje na doménu z kontrolních bodů ve více zemích a hlásí každý výsledek zvlášť, takže vzor, kdy některá místa timeoutují a jiná uspějí, ukazuje na přetížený server obsluhující jen některé požadavky, zatímco jednotný timeout všude ukazuje na to, že je origin úplně nedostupný nebo firewall zahazuje každé spojení.
Jak opravit chybu 522
Pokud jste návštěvník
- Po krátkém čekání znovu načtěte stránku. Chvilkový nárůst zátěže nebo krátký síťový výpadek se často vyřeší samo.
- Zkontrolujte stavovou stránku webu, pokud ji má, kvůli známému incidentu.
- Na vaší straně není co opravit. Timeout nastává mezi Cloudflare a vlastním serverem webu, ne ve vašem prohlížeči ani ve spojení s Cloudflare.
Pokud web provozujete
- Zkontrolujte zátěž serveru a dostupnou kapacitu spojení v čase selhání: procesor, paměť a nakonfigurované limity spojení nebo workerů webového serveru (například
worker_connectionsu nginx). - Ověřte, že váš firewall nebo bezpečnostní skupina na daném portu povoluje zveřejněné rozsahy IP Cloudflare a že odmítá resetem místo tichého zahazování paketů, což alespoň promění 522 v lépe diagnostikovatelnou 521.
- Zapněte TCP keepalive na webovém serveru originu a na jakémkoli load balanceru před ním a zkontrolujte, že nastavení keepalive na úrovni operačního systému nezůstalo na výchozích hodnotách výrazně delších, než spojení skutečně potřebuje.
- Pokud váš hosting nebo cloudová síť vyžaduje explicitní seznam povolených IP oddělený od firewallu, ověřte, že je na něm IP adresa originu.
- Změřte čas samotného handshake přímo proti originu, obejděte Cloudflare, abyste zjistili, jestli je zpoždění vůbec v dosažení vašeho serveru:
Spojení, které se tady zasekne, potvrdí, že samotný origin je pomalý v přijímání spojení, ne že jde o něco specifického pro Cloudflare.curl -v -H "Host: example.com" --connect-timeout 5 https://ORIGIN_IP/ - U pomalých jednotlivých endpointů místo obecně přetíženého serveru přesuňte dlouho běžící práci (reporty, exporty, dávkové úlohy) mimo cestu požadavku do úlohy na pozadí, na kterou se klient dotazuje nebo o níž dostane oznámení, a zvýšení timeoutu v Cloudflare Enterprise zvažte jen jako dočasné řešení pro trasy, které nemůžete rychle zrychlit.
Jak jí předejít
Server, kterému se handshake nepodaří jen pod špičkovou zátěží, projde každou ruční kontrolu, kterou sami spustíte, protože je nepravděpodobné, že ho otestujete přesně ve chvíli, kdy má potíže. HTTP kontrola běžící podle plánu mimo vaši síť zachytí toto okno selhání i tehdy, když se nikdo nedívá, a spuštění z více zemí ukáže, jestli je zpomalení otázkou globální kapacity, nebo regionální síťové trasy.
Související chyby
- Chyba Cloudflare 520: unknown error - origin odpověděl, ale odpověď byla nepoužitelná.
- Chyba Cloudflare 521: web server is down - origin spojení odmítl, místo aby neodpovídal.
- Chyby serveru 5xx - obecná rodina stavových kódů.
- 502 Bad Gateway - necloudflarová verze selhání upstreamu.
Často kladené otázky
Jak dlouho Cloudflare čeká, než zobrazí chybu 522?
Přibližně 15 sekund na TCP handshake. Pokud origin do té doby spojení nepřijme, Cloudflare to vzdá a vrátí návštěvníkovi 522.
Je 522 totéž jako nedostupný server?
Ne vždy. Může taky znamenat, že server běží, ale je příliš zaneprázdněný na to, aby včas přijal nové spojení, nebo že firewall zahazuje pokus o spojení bez posílání resetu.
Proč firewall spojení zahazuje místo toho, aby ho odmítl?
Některé výchozí konfigurace firewallu nebo bezpečnostní skupiny potichu zahazují pakety, které neodpovídají povolovacímu pravidlu, místo aby poslaly TCP reset. Právě toto tiché zahození mění to, co by mohla být rychlá, jasná 521, na pomalejší a nejednoznačnější 522.
Znamená 522, že musím upgradovat server?
Ne nutně. Než začnete škálovat výkon, zkontrolujte, jestli není vypnutý keepalive, jestli firewall potichu nezahazuje rozsahy Cloudflare, a jestli nejsou limity spojení v konfiguraci webového serveru nastavené níž, než provoz skutečně potřebuje.
Jaký je rozdíl mezi 522 a 524?
522 je selhání ještě před dokončením TCP handshake. 524 je dokončené spojení, kde samotná HTTP odpověď trvá příliš dlouho, obvykle kvůli pomalé logice aplikace, ne kvůli problému se sítí nebo kapacitou.
Může jeden pomalý databázový dotaz způsobit chybu 522?
Ne přímo, protože 522 nastává předtím, než je odeslán jakýkoli požadavek. Pomalý dotaz spíš vyprodukuje 524, kde se spojení povedlo, ale odpověď trvala příliš dlouho.