Způsoby platby Abuse

Oprava 504 gateway time out Nginx

20.02.2024, 23:31

Chybové hlášení 504 Gateway Timeout v systému Nginx znamená, že server se systémem Nginx nebyl schopen přijmout odpověď od proxy serveru v určeném časovém období. K tomu obvykle dochází proto, že proxy server nemůže zpracovat požadavek v určeném čase, nebo kvůli problémům se spojením mezi Nginx a proxy serverem.

Proč se zobrazí 504 Časový limit brány

Chyba se objevuje, když server Nginx běží v režimu proxy serveru. K tomu dochází, pokud se používá php-fpm nebo Apache. Pokud ji přeložíme z angličtiny do ruštiny, dostaneme následující hlášku - byla překročena doba čekání na odpověď serveru.

Příčin tohoto chování je několik:

  • PHP nebo jiný jazykový skript se zcela zavěsil a již nevrátí žádnou odpověď;
  • skript běží velmi dlouho, ale Nginx má nastavený interval, který obnoví spojení, pokud cílový server neodpoví na požadavek ve stanoveném čase;
  • server je přetížený a nestačí obsloužit všechny klienty a vrátit odpovědi na všechny požadavky Nginx.

Nyní si povíme, co můžete udělat a jak opravit chybu 504 Gateway Timeout.

Jak opravit 504 gateway time out Nginx?

První věc, kterou je třeba vyzkoušet v praxi, je, že pokud váš server, php-fpm nebo apache nemá dostatek systémových prostředků, jako je paměť nebo procesor, zjistěte volnou paměť RAM pomocí příkazu free:

$ free -h

Zatížení procesoru můžete zjistit pomocí příkazu htop:

$ htop

Pokud vidíte, že PHP zabírá veškerý čas procesoru, znamená to, že problém je ve zdrojích serveru. Můžete se pokusit vypořádat s enginem webu, optimalizovat prostředky nebo zvolit výkonný server VPS.

Druhá možnost - pokud to bylo naplánováno tak, aby skript pracoval dlouhou dobu. V tomto případě je třeba nakonfigurovat Nginx tak, aby čekal na odpověď Apache nebo php-fpm. Pro vyřešení problému v případě php-fpm stačí přidat dva řádky do konfiguračního bloku fastgci:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 znamená 300 sekund, což pro většinu skriptů stačí, ale v případě potřeby není obtížné nastavit i více. K chybě 504 může dojít také v případě, že je Nginx použit jako proxy server pro Apache nebo jiný webový server, pak je také třeba nastavit dobu čekání proxy serveru.

Do sekce serveru přidejte tyto řádky:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

V tomto případě máme nastaven timeout 600 sekund.

Nyní musíme restartovat Nginx:

$ sudo systemctl restart nginx

Další důvod a jeho řešení, pokud skript visí. Pokud skript spustíte sami, hned uvidíte, co visí, ale pokud na takovou chybu narazí uživatelé, jedná se o závažnější problém. Pomocí příkazu můžete zjistit, zda se vaši uživatelé s takovou chybou setkávají a kde se vyskytuje:

$ fgrep -i " 504 " /var/log/nginx/access.log

Podrobnější informace lze někdy vidět v souboru error.log:

$ fgrep -i " 504 " /var/log/nginx/error.log

Dále, pokud je problém v php-fpm, můžete sledovat, které skripty běží pomalu, pomocí vestavěné funkce slow-log.

Chcete-li ji aktivovat, přidejte do konfigurace poolu následující řádky:

$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Tím je instrukce dokončena.