Mokėjimo būdai Abuse

Ištaisyti 504 vartai laiko out Nginx

20.02.2024, 23:31

"504 Gateway Timeout" klaida "Nginx" reiškia, kad "Nginx" paleistas serveris negalėjo gauti atsakymo iš tarpinio serverio per nurodytą laiką. Paprastai taip atsitinka dėl to, kad tarpinis serveris negali apdoroti užklausos per nurodytą laiką arba dėl ryšio problemų tarp "Nginx" ir tarpinio serverio.

Kodėl rodomas 504 Gateway Timeout

Klaida atsiranda, kai "Nginx" serveris veikia tarpinio serverio režimu. Taip atsitinka, kai naudojamas php-fpm arba "Apache". Išvertę ją iš anglų kalbos į rusų kalbą, gausime tokią informaciją - viršytas atsakymo iš serverio laukimo laikas.

Tokio elgesio priežastys yra kelios:

  • PHP ar kitos kalbos scenarijus visiškai pakibo ir nebegrąžina jokio atsakymo;
  • scenarijus veikia labai ilgai, tačiau "Nginx" yra sukonfigūruotas intervalas, kuris leidžia iš naujo nustatyti ryšį, jei tikslinis serveris per nustatytą laiką neatsako į užklausą;
  • serveris yra perkrautas ir nespėja aptarnauti visų klientų ir grąžinti atsakymų į visas "Nginx" užklausas.

Dabar pakalbėkime apie tai, ką galite padaryti ir kaip ištaisyti 504 Gateway Timeout klaidą.

Kaip ištaisyti 504 gateway time out Nginx klaidą?

Pirmas dalykas, kurį reikia išbandyti praktiškai, yra tas, kad jei jūsų serveriui, php-fpm arba apache trūksta sistemos išteklių, pavyzdžiui, atminties arba procesoriaus, naudodami komandą free pažiūrėkite, kiek yra laisvos operatyviosios atminties, naudodami komandą free:

$ free -h

CPU apkrovą galite sužinoti naudodami komandą htop:

$ htop

Jei matote, kad PHP užima visą procesoriaus laiką, vadinasi, problema susijusi su serverio ištekliais. Galite pabandyti susitvarkyti su svetainės varikliu, optimizuoti išteklius arba pasirinkti galingą VPS serverį.

Antrasis variantas - jei buvo suplanuota, kad scenarijus veiktų ilgai. Tokiu atveju reikia sukonfigūruoti "Nginx" taip, kad jis lauktų atsakymo iš "Apache" arba php-fpm. Norint išspręsti problemą php-fpm atveju, tereikia į konfigūracijos bloką fastgci pridėti dvi eilutes:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 reiškia 300 sekundžių, daugumai scenarijų to pakanka, tačiau prireikus nesunku nustatyti ir daugiau. Taip pat 504 klaida gali atsirasti, kai "Nginx" naudojamas kaip "Apache" ar kito žiniatinklio serverio tarpinis serveris, tada taip pat reikia konfigūruoti tarpinio serverio laiko tarpą.

Pridėkite šias eilutes į serverio skyrių:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Šiuo atveju nustatome 600 sekundžių trukmę.

Dabar turime iš naujo paleisti "Nginx":

$ sudo systemctl restart nginx

Kita priežastis ir jos sprendimas, jei scenarijus stringa. Jei scenarijų paleisite patys, iš karto pamatysite, kas pakimba, tačiau jei su tokia klaida susiduria naudotojai, tai yra rimtesnė problema. Ar jūsų naudotojai susiduria su tokiomis klaidomis ir kur jos atsiranda, galite pamatyti naudodami komandą:

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

Kartais išsamesnę informaciją galima pamatyti error.log:

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

Be to, jei problema yra php-fpm, galite stebėti, kurie skriptai veikia lėtai, naudodami integruotą slow-log funkciją.

Norėdami ją įjungti, į savo baseino konfigūraciją įtraukite šias eilutes:

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

Tai užbaigia instrukciją.