Maksutavat Abuse

Korjaa 504 gateway aika ulos Nginx

20.02.2024, 23:31

Nginxin 504 Gateway Timeout -virhe tarkoittaa, että Nginx-palvelin ei pystynyt vastaanottamaan vastausta välityspalvelimelta määritetyn ajan kuluessa. Tämä johtuu yleensä siitä, että välityspalvelin ei pysty käsittelemään pyyntöä määritellyssä ajassa tai että Nginxin ja välityspalvelimen välillä on yhteysongelmia.

Miksi 504 Gateway Timeout näkyy

Virhe ilmenee, kun Nginx-palvelin toimii välitystilassa. Tämä tapahtuu, kun käytetään php-fpm:ää tai Apachea. Jos käännämme sen englannista venäjäksi, saamme seuraavan - palvelimen vastauksen odottamiseen varattu aika on ylittynyt.

Tähän käyttäytymiseen on useita syitä:

  • PHP- tai muun kielinen skripti on täysin jumissa eikä enää palauta mitään vastausta;
  • skripti on käynnissä hyvin pitkään, mutta Nginxissä on määritetty aikaväli, joka nollaa yhteyden, jos kohdepalvelin ei ole vastannut pyyntöön annetussa ajassa;
  • palvelin on ylikuormitettu eikä ehdi palvella kaikkia asiakkaita ja palauttaa vastauksia kaikkiin Nginxin pyyntöihin.

Puhutaan nyt siitä, mitä voit tehdä ja miten korjata 504 Gateway Timeout -virhe.

Miten korjata 504 gateway time out Nginx?

Ensimmäinen asia, jota kannattaa kokeilla käytännössä, on se, että jos palvelimestasi, php-fpm:stä tai apachesta puuttuu järjestelmäresursseja, kuten muistia tai prosessoria, katso vapaata RAM-muistia free-komennolla:

$ free -h

Voit selvittää suorittimen kuormituksen htop-komennolla:

$ htop

Jos näet, että PHP vie kaiken prosessoriajan, se tarkoittaa, että ongelma on palvelimen resursseissa. Voit yrittää käsitellä sivuston moottoria, optimoida resursseja tai valita tehokkaan VPS-palvelimen.

Toinen vaihtoehto - jos se oli suunniteltu niin, että skripti toimi pitkään. Tässä tapauksessa sinun on määritettävä Nginx odottamaan vastausta Apachelta tai php-fpm:ltä. Ongelman ratkaisemiseksi php-fpm:n tapauksessa sinun tarvitsee vain lisätä kaksi riviä fastgci-konfiguraatiolohkoon:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 tarkoittaa 300 sekuntia, useimmille skripteille tämä riittää, mutta ei ole myöskään vaikeaa asettaa tarvittaessa enemmän. Myös 504-virhe voi esiintyä, kun Nginxiä käytetään Apachen tai jonkin muun web-palvelimen välittäjänä, silloin sinun on myös määritettävä välittäjän odotusaika.

Lisää nämä rivit palvelinosioon:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Tässä tapauksessa aikakatkaisu on 600 sekuntia.

Nyt meidän on käynnistettävä Nginx uudelleen:

$ sudo systemctl restart nginx

Toinen syy ja sen ratkaisu, jos skripti roikkuu. Jos suoritat skriptin itse, näet heti, mikä roikkuu, mutta jos käyttäjät kohtaavat tällaisen virheen, kyseessä on vakavampi ongelma. Voit nähdä, kohtaavatko käyttäjät tällaisia virheitä ja missä ne ilmenevät komennolla:

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

Tarkemmat tiedot ovat joskus nähtävissä error.log-tiedostossa:

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

Jos ongelma on php-fpm, voit lisäksi seurata, mitkä skriptit toimivat hitaasti käyttämällä sisäänrakennettua slow-log-toimintoa.

Voit aktivoida sen lisäämällä seuraavat rivit poolin konfiguraatioon:

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

Tämä viimeistelee ohjeen.