GNU/Linux >> Znalost Linux >  >> Panels >> Plesk

Odstraňování problémů s chybami brány a časovými limity:502, 504

Tento článek vám může pomoci při odstraňování problémů souvisejících s chybami 504/502/gateway. Při odstraňování problémů může být užitečné porozumět tomu, jak funguje zpracování mezi nginx a PHP, které se často používá pro vysoce výkonné hostování webových aplikací, jako je WordPress.

Běžné chyby, ke kterým dochází, které jsou připojeny k této konfiguraci:

  • Časový limit brány 504
  • Časový limit brány (504)
  • Chyba HTTP 504 – časový limit brány
  • Chyba vypršení časového limitu brány
  • 502 špatná brána
  • Špatná brána

Proč existuje brána?

Když požadavek přijde přes webový prohlížeč, nejprve zasáhne nginx, náš lehký front-end webový server a nginx se poté rozhodne, kam by měl požadavek směřovat, jako průvodčí vlaku. Nginx obvykle zvládne jednodušší požadavky na zdroje (jako jsou obrázky a stránky uložené v mezipaměti) sám, zatímco požadavky na dynamické stránky (jako je administrátorská stránka WordPress nebo nákupní košík) bude odesílat do apache (pro zpracování modsecurity a .htaccess) a poté do PHP. Vypadá to takto:

nginx -> apache -> php -fpm

nginx funguje jako brána, která odesílá správné typy požadavků do Apache a PHP. Pokud se vyskytne problém „po proudu“ – například s Apache nebo php – získáte bránu chyba, například 502 Bad Gateway nebo Časový limit brány 504 .

Tento problém může být extrémně pomalý běh kódu nebo skutečný problém se službou Apache nebo PHP, i když u našeho hostingu je problém nejčastěji problém s kódem.

Pro získání dalších informací použijte protokoly serveru

Chcete-li pomoci určit příčinu chyby brány, zkontrolujte protokoly a zjistěte, co je hlášeno. někdy protokoly jednoduše nahlásí chybu 502 nebo 504 – stejně jako to vidíte v prohlížeči – což nebude užitečné. Někdy se však může stát, že těsně před chybou brány bude zaznamenána chyba nebo varování, které určí, jaký plugin nebo motiv chybu způsobuje.

Zde se dozvíte, jak používat Plesk k zobrazení protokolů. Pokud můžete tyto chyby použít k tomu, abyste se dostali k jádru problému, rozhodně to udělejte! Jinak si přečtěte další způsoby, jak věci zúžit.

Pomoc! Nemohu se dostat ani do administrátorské oblasti svého webu! (Stejně jako wp-admin pro WordPress)

Někdy, když dostáváte neustálé chyby brány, nemáte přístup do oblasti pro správu svého webu (jako je wp-admin WordPress), ale zjistíte, že to musíte udělat, abyste pomohli vyřešit tento problém. Jediný způsob, jak znovu získat přístup, je zablokovat přístup, dokud nebude možné problém vyřešit.

Chcete-li zablokovat přístup, můžete postupovat jedním ze dvou způsobů:1) zablokovat přístup ke konkrétní části webu, která spotřebovává zdroje, nebo 2) můžete dočasně zablokovat přístup ke všem IP adresám kromě své vlastní, abyste znovu získali přístup.

Zablokování přístupu ke všem adresám IP kromě vaší (jednodušší)

Přihlaste se do Plesk a navštivte nastavení apache a nginx strana. V části „Zakázat přístup k webu ” zadejte vlastní hodnotu a nastavte ji na "* (bez uvozovek). Poté v části „Vyloučení ” zadejte svou vlastní IP adresu a uložte změny. Po uložení změn možná budete muset počkat až 3 minuty, než se server restartuje (~1 m) a všechny běžící procesy PHP dosáhnou časového limitu (~2 m).

Po dokončení odstraňování problémů nezapomeňte tento blok odstranit.

Zablokování přístupu k požadavku náročnému na zdroje (složitější)

Pokud je na webu pouze jedna stránka nebo zdroj, který způsobuje tento problém (například jedna stránka, která se načítá pomalu), použijte protokoly k identifikaci konkrétního identifikátoru URI požadavku. Poté přidejte následující úryvek kódu na začátek svého souboru .htaccess, abyste zablokovali problematický zdroj (byť jen dočasně), abyste měli přístup k panelu správce. Nahraďte filename\.php se skutečným identifikátorem URI požadavku zobrazeným v protokolech (toto je část, která následuje za doménou). Pokud jsou v cestě k souboru tečky, nezapomeňte je přidat zpětným lomítkem, jak je vidět v příkladu.

<FilesMatch filename\.php>
Order Allow,Deny
Deny from all
</FilesMatch>

Běžné důvody chyb brány

Možná rychlá oprava:

Pokud byl problém jen jednorázový (jako když jste spustili skript a ten se nepřestal spouštět), řešením je přímo restartovat základní služby , což přinutí skript ukončit.

Pokud nemáte root přístup k serveru nebo administrátorský přístup k Plesku, můžete takový restart často spustit provedením změn v konfiguraci webu v Plesku. Zkuste například přejít na tlačítko „Nastavení PHP“ pro vaši doménu, proveďte v něm jakoukoli malou změnu (například zvětšení paměti z 32 MB na 48 MB) a poté změny uložte. Tato aktualizace spouští restart zpracování Apache a PHP a může vyřešit vaši chybu!

Může trvat až 3 minuty (nebo déle v závislosti na vašem poskytovateli), než se změny projeví.

Pokud to nepomůže nebo se problém vrátí, budete muset projít následujícími možnými příčinami/příznaky, abyste zjistili, co nejlépe vyhovuje vašemu případu.

Pokouším se spustit export, import nebo velký přehled, který chvíli trvá

Pokud váš web běží normálně, ale při každém pokusu o spuštění velkého exportu, importu nebo přehledu dat vašeho webu se zobrazí chyby brány, je to proto, že před zpracováním přehledu dochází k vypršení časového limitu. Ačkoli neexistuje žádný super jednoduchý způsob, jak tento dlouhodobý problém napravit, existuje způsob, jak jej opravit krátkodobě:dočasně prodloužit časové limity.

Můžete to udělat v ovládacím panelu Plesk podle kroků v našem průvodci, jak změnit nastavení PHP. Budete muset změnit hodnoty (jsou v sekundách) pro max_execution_time a max_input_time na něco jako 300, aby procesy mohly běžet po dobu 5 minut. Po dokončení dlouhotrvající akce nezapomeňte tyto hodnoty změnit zpět.

Proč nemůžete jednoduše prodloužit časové limity trvale?

Technicky můžete, ale trvalé zvyšování časových limitů velmi pravděpodobně nepříznivě ovlivní výkon vašeho webu . Výchozí časové limity jsou záměrně na hodnoty jako 30 nebo 60 sekund:pokud proces trvá tak dlouho, než se dokončí, a spustíte příliš dlouho běžících procesů, mohou zahltit všechny dostupné sloty pro zpracování a zrušit celý váš web pro všechny návštěvníky. Proto udržování hodnot časového limitu kolem 30–60 s zajišťuje, že k tomu může dojít maximálně po tuto dobu.

Téměř každý požadavek na můj web nebo domovskou stránku se zpracovává dlouho

Zda se jedná o problém, poznáte tak, že se jedné nebo více stránkám na webu začnou načítat déle než 10 s a váš prohlížeč nezobrazuje nic, dokud neuplyne více než 10 sekund.

To může nastat ze dvou běžných důvodů:

1) Problémy s výkonem kódu :na webu běží nějaký kód, který není optimalizován pro výkon nebo máte problém. Příkladem by mohla být nekonečná smyčka v kódu nebo něco, co se pokouší vytáhnout miliony databázových záznamů v jednom dotazu (spíše než je získávat v dávkách). První věc, kterou je třeba zkontrolovat, je jakýkoli kód, který byl nedávno přidán na web, jako jsou pluginy, nové téma, vlastní kód atd. Pravděpodobně budete chtít zapojit svého vývojáře, aby vám pomohl tento problém zúžit. Máme článek KB s některými běžně uznávanými verzemi tohoto, ale pokud pomocí těchto návrhů nejste schopni určit příčinu, pak zbývající možností je vyčerpávající řešení problémů. Zde máme průvodce vyčerpávajícím řešením problémů s WordPress.

2) Pomalé nebo nereagující požadavky na externí zdroje: Některý kód PHP se pokouší komunikovat s externím zdrojem (hostovaným jinde), kterému trvá příliš dlouho, než odpovídá, nebo nereaguje vůbec. Chcete-li vyřešit problémy s externími zdroji, budete se muset podívat na to, které části kódu PHP vašeho webu (vlastní kód nebo pluginy/kód motivu) se snaží získat externí zdroje. Nejčastěji se jedná o kód, který se připojuje ke službě třetí strany, jako je platební procesor nebo načítání dat o počasí přes rozhraní API nebo scraping. Zde je několik příkladů:

  • Některé platební brány nebo služby XML API používají nestandardní porty (ačkoli je to v dnešní době velmi neobvyklé, protože standardní porty se nyní používají mnohem častěji). Pokud nepoužívá port 80 nebo 443, pravděpodobně se pokouší komunikovat na zablokovaném portu a selhává.
  • O starších twitterových widgetech je známo, že načítají tweety pomocí back-endového kódu a pak selhání připojení k serverům Twitter způsobí zablokování, jako je tento. To se nevztahuje na vložení vlastních zdrojů Twitteru, které fungují asynchronně prostřednictvím JavaScriptu.

Pokud používáte WordPress nebo jakýkoli jiný CMS s pluginy, zkuste deaktivovat jakýkoli plugin, který by mohl komunikovat externě, abyste zjistili, zda problém vyřeší.

Pokud nejste schopni intuitivně určit, který plugin může být na vině, pak zbývající možností je vyčerpávající řešení problémů. Zde máme průvodce vyčerpávajícím řešením problémů s WordPress.

Příčina:Pro obsluhu požadavků je potřeba příliš mnoho procesů PHP

Pokud vaše web vyžaduje mnoho procesů PHP kvůli velkému množství provozu vytvářejícího požadavky na dynamické zpracování, pak by vaším primárním cílem mělo být snížení množství dynamického zpracování, ke kterému musí dojít při každém načtení stránky. Zde je postup:

  • Pokud používáte WordPress, přečtěte si zde, jak nainstalovat a optimalizovat mezipaměť.
  • Pokud již máte povoleno ukládání do mezipaměti, dalším krokem je zjištění a omezení případů, kdy dochází k dynamickému zpracování.

Příčina:Omezené vyrovnávací paměti

Procesy Apache nebo PHP mohou generovat větší velikosti dat, než které může nginx zpracovat. Vzhledem k tomu, že Apache i PHP potřebují předat tato data přes nginx, aby se dostali k návštěvníkovi webu, generuje chybu 502 indikující „Upstream odeslán příliš velkou hlavičku“. Tuto chybu jsme zaznamenali u zákazníků používajících plugin WordPress OptInMonster, ale mohl by to udělat jakýkoli software.

Náš sdílený hosting by již měl být optimalizován pomocí větších vyrovnávacích pamětí pro nginx, ale pokud máte vlastní VPS nebo nejste u nás hostováni, budete muset tyto hodnoty sami použít na konfiguraci nginx:

fastcgi_buffers 128 4096k;
fastcgi_buffer_size 4096k;

To říká nginxu, že je v pořádku, aby přijímal velké (4 MB) hlavičky. Můžete je vložit do souboru jako:/etc/nginx/conf.d/increase_buffers.conf poté restartujte nginx, aby se změny projevily. Příklad:

echo 'fastcgi_buffers 128 4096k;
fastcgi_buffer_size 4096k;' > /etc/nginx/conf.d/increase_buffers.conf

Příčina:PHP-FPM je nesprávně nakonfigurován nebo potřebuje vyladění (pouze VPS/dedikovaný server)

Někdy, pokud se vám neustále objevují chyby Gateway Timeout a jediná věc, která je vymaže, je restartování PHP (jak je popsáno výše), nebo pokud jste na VPS a vidíte, že vaše procesy PHP běží na vysokém CPU a trvají daleko déle, než by měli (nebo vám bylo řečeno, že se tak děje serveroví technici), budete muset podniknout určité kroky, abyste je ovládli.

Poznámka:Pokud používáte náš sdílený hosting, naše konfigurace PHP-FPM je již optimalizována pro prostředí sdíleného hostování, takže pokud dochází k chybám brány, toto řešení nebude platit.

Níže jsou uvedeny některé možnosti, které se nám osvědčily, je však velmi důležité poznamenat, že se jedná o řešení skutečného problému. Skutečným řešením je identifikace kódu, který nereaguje dostatečně rychle, a optimalizace jeho výkonu.

  1. PHP-FPM vám umožňuje vyladit PHP Process Manager (FastCGI Process Manager =FPM) provedením některých změn v Plesku. Pokud používáte proces PHP-FPM ve stylu „na vyžádání“, možná budete chtít snížit počet požadavků, které každý proces zpracuje, než bude ladně ukončen/restartován nový proces. Toto je označeno jako pm.max_requests. Pokud máte problémy s výkonem, zkuste 100 nebo 150
  2. Pokud vaše procesy PHP neutichají, možná je budete muset *ukončit*. Existuje několik dobrých způsobů, jak to udělat. První je rozhodně nastavit časový limit nečinnosti pro procesy PHP-FPM nastavením pm.process_idle_timeout – zkuste to nastavit na 10s (můžete to udělat v poli pod nastavením FPM.
  3. Pokud váš PHP stále zpracovává nevymírají, možná s nimi budete muset být ještě agresivnější. Zkuste nastavit request_terminate_timeout na několik sekund vyšší, než je vaše nastavení max_execution_time. Pokud max_execution_time proces neukončí, request_terminate_timeout určitě ano.

Pokud se vám tato příručka zdála užitečná, podívejte se na další dostupné příručky a příspěvky. Pokud potřebujete vysoce výkonného kanadského webového hostitele nebo hostitelského partnera VPS, podívejte se na naše služby!


Plesk
  1. Úvod a přístup k informacím cPanel

  2. Ukázka konfigurace logrotate a řešení problémů

  3. Časový limit brány nginx 504

  1. Jak získat přístup k phpMyAdmin a phpPgAdmin v cPanel

  2. Jak získat přístup k souborovým systémům Linux ve Windows 10 a WSL 2

  3. 502 Chyba špatné brány NGINX [Řešení]

  1. Nainstalujte SoftHSM a přistupujte k němu prostřednictvím programu Java

  2. Odstraňování problémů se sítí Linux a ladění?

  3. Hostitelé přístupu cPanel a MySQL