"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.
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:
Dabar pakalbėkime apie tai, ką galite padaryti ir kaip ištaisyti 504 Gateway Timeout 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ą.
Apply the discount by inserting the promo code in the special field at checkout:
Apply the discount by inserting the promo code in the special field at checkout: