Makseviisid Abuse

Fix 504 gateway aeg välja Nginx

20.02.2024, 23:31

Nginxi värava 504 Timeout-viga tähendab, et Nginxi kasutav server ei suutnud määratud aja jooksul proxy-serverilt vastust saada. See juhtub tavaliselt seetõttu, et proxy-server ei suuda päringut ettenähtud aja jooksul töödelda või on Nginxi ja proxy-serveri vahelised ühendusprobleemid.

Miks ilmub 504 Gateway Timeout

Viga ilmneb, kui Nginx'i server töötab proxy-režiimis. See juhtub, kui kasutatakse php-fpm või Apache'i. Kui tõlkida see inglise keelest vene keelde, siis saame järgmist - serveri vastuse ootamise aeg on ületatud.

Sellise käitumise põhjuseid on mitu:

  • PHP või muu keele skript on täielikult kinni jäänud ja ei anna enam mingit vastust tagasi;
  • skript töötab väga pikka aega, kuid Nginxil on konfigureeritud intervall, mis nullib ühenduse, kui sihtserver ei ole ettenähtud aja jooksul päringule vastanud;
  • server on ülekoormatud ja tal ei ole aega kõiki kliente teenindada ja kõikidele Nginxi päringutele vastuseid tagastada.

Räägime nüüd sellest, mida saab teha ja kuidas parandada 504 Gateway Timeout viga.

Kuidas parandada 504 gateway time out Nginx?

Esimene asi, mida praktikas proovida, on see, et kui teie serveril, php-fpm või apache'il on puudu süsteemiressursse, näiteks mälu või protsessor, vaadake vaba RAM-i, kasutades käsku free:

$ free -h

CPU koormust saate teada käsuga htop:

$ htop

Kui näete, et PHP võtab kogu protsessori aega, siis tähendab see, et probleem on serveri ressurssides. Võite proovida tegeleda saidi mootoriga, optimeerida ressurssi või valida võimsa VPS-serveri.

Teine võimalus - kui see oli planeeritud nii, et skript töötas pikka aega. Sellisel juhul peate konfigureerima Nginxi ootama Apache'i või php-fpm-i vastust. Probleemi lahendamiseks php-fpm puhul tuleb lisada fastgci konfiguratsiooniplokki vaid kaks rida:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 tähendab 300 sekundit, enamiku skriptide puhul piisab sellest, kuid vajadusel ei ole raske ka rohkem määrata. Samuti võib 504 viga tekkida, kui Nginx'i kasutatakse Apache'i või mõne muu veebiserveri proxy'na, siis tuleb samuti konfigureerida proxy ooteaeg.

Lisa need read serveri sektsiooni:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Antud juhul on meil ooteaeg 600 sekundit.

Nüüd peame Nginxi taaskäivitama:

$ sudo systemctl restart nginx

Teine põhjus ja selle lahendus, kui skript ripub. Kui te käivitate skripti ise, siis näete kohe, mis ripub, aga kui selline viga tekib kasutajatel, siis on tegemist tõsisema probleemiga. Saate näha, kas teie kasutajatel esineb selliseid vigu ja kus need tekivad, kasutades käsku:

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

Üksikasjalikumat teavet saab mõnikord näha error.logis:

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

Lisaks, kui probleemiks on php-fpm, saate jälgida, millised skriptid aeglaselt töötavad, kasutades sisseehitatud slow-log funktsiooni.

Selle aktiveerimiseks lisage oma basseini konfiguratsiooni järgmised read:

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

See lõpetab juhendi.