Spôsoby platby Abuse

Oprava 504 gateway time out Nginx

20.02.2024, 23:31

Chyba 504 Gateway Timeout v systéme Nginx znamená, že server so systémom Nginx nedokázal prijať odpoveď od servera proxy v stanovenom časovom období. Zvyčajne sa to stáva preto, že server proxy nedokáže spracovať požiadavku v stanovenom čase alebo z dôvodu problémov s pripojením medzi Nginx a serverom proxy.

Prečo sa zobrazuje 504 Gateway Timeout

Chyba sa vyskytuje, keď server Nginx beží v režime proxy servera. Stáva sa to, keď sa používa php-fpm alebo Apache. Ak ju preložíme z angličtiny do ruštiny, dostaneme nasledovné - čas čakania na odpoveď zo servera bol prekročený.

Príčin tohto správania je niekoľko:

  • PHP alebo iný jazykový skript sa úplne zavesil a už nevráti žiadnu odpoveď;
  • skript beží veľmi dlho, ale Nginx má nakonfigurovaný interval na resetovanie spojenia, ak cieľový server neodpovedal na požiadavku v stanovenom čase;
  • server je preťažený a nestihne obslúžiť všetkých klientov a vrátiť odpovede na všetky požiadavky Nginx.

Teraz si povieme, čo môžete urobiť a ako opraviť chybu 504 Gateway Timeout.

Ako opraviť 504 gateway time out Nginx?

Prvá vec, ktorú treba vyskúšať v praxi, je, že ak vášmu serveru, php-fpm alebo apache chýbajú systémové prostriedky, napríklad pamäť alebo procesor, pozrite si voľnú pamäť RAM pomocou príkazu free:

$ free -h

Zaťaženie procesora môžete zistiť pomocou príkazu htop:

$ htop

Ak vidíte, že PHP zaberá všetok čas procesora, znamená to, že problém je v zdrojoch servera. Môžete sa pokúsiť vyriešiť engine stránky, optimalizovať zdroje alebo si vybrať výkonný server VPS.

Druhá možnosť - ak to bolo naplánované tak, že skript pracoval dlhý čas. V tomto prípade je potrebné nakonfigurovať Nginx tak, aby čakal na odpoveď od Apache alebo php-fpm. Na vyriešenie problému v prípade php-fpm stačí pridať dva riadky do konfiguračného bloku fastgci:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 znamená 300 sekúnd, pre väčšinu skriptov to stačí, ale v prípade potreby nie je ťažké nastaviť aj viac. Chyba 504 sa môže vyskytnúť aj vtedy, keď sa Nginx používa ako proxy server pre Apache alebo iný webový server, vtedy je tiež potrebné nastaviť čas čakania pre proxy server.

Do časti servera pridajte tieto riadky:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

V tomto prípade máme časový limit 600 sekúnd.

Teraz musíme reštartovať Nginx:

$ sudo systemctl restart nginx

Ďalší dôvod a jeho riešenie, ak sa skript zavesí. Ak skript spustíte sami, hneď uvidíte, čo visí, ale ak na takúto chybu narazia používatelia, ide o vážnejší problém. Pomocou príkazu môžete zistiť, či sa vaši používatelia stretávajú s takýmito chybami a kde sa vyskytujú:

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

Podrobnejšie informácie možno niekedy vidieť v súbore error.log:

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

Ďalej, ak je problémom php-fpm, môžete sledovať, ktoré skripty bežia pomaly, pomocou vstavanej funkcie slow-log.

Ak ju chcete aktivovať, pridajte do konfigurácie vášho poolu nasledujúce riadky:

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

Týmto sa inštrukcia dokončí.