Betalningsmetoder Abuse

Fix 504 gateway-tidsutgång Nginx

20.02.2024, 23:31

Ett 504 Gateway Timeout-fel i Nginx innebär att servern som kör Nginx inte kunde ta emot ett svar från proxyservern inom den angivna tidsperioden. Detta händer vanligtvis på grund av att proxyservern inte kan behandla begäran inom den angivna tiden eller på grund av anslutningsproblem mellan Nginx och proxyservern.

Varför 504 Gateway Timeout visas

Felet uppstår när Nginx-servern körs i proxy-läge. Detta händer när php-fpm eller Apache används. Om vi översätter det från engelska till ryska får vi följande - tiden för att vänta på ett svar från servern har överskridits.

Det finns flera orsaker till detta beteende:

  • PHP eller ett annat språkskript har hängt sig helt och kommer inte längre att returnera något svar;
  • skriptet körs under en mycket lång tid, men Nginx har ett intervall konfigurerat för att återställa anslutningen om målservern inte har svarat på begäran inom den tilldelade tiden;
  • Servern är överbelastad och har inte tid att betjäna alla klienter och returnera svar på alla Nginx-förfrågningar.

Låt oss nu prata om vad du kan göra och hur du åtgärdar 504 Gateway Timeout-felet.

Hur fixar jag 504 gateway timeout Nginx?

Det första du ska försöka i praktiken är att om din server, php-fpm eller apache saknar systemresurser, till exempel minne eller CPU, se det lediga RAM-minnet med kommandot free:

$ free -h

Du kan ta reda på CPU-belastningen med htop-kommandot:

$ htop

Om du ser att PHP tar upp all CPU-tid, betyder det att problemet är med serverresurserna. Du kan försöka hantera webbplatsens motor, optimera resursen eller välja en kraftfull VPS-server.

Det andra alternativet - om det var planerat så att skriptet fungerade under lång tid. I det här fallet måste du konfigurera Nginx för att vänta på ett svar från Apache eller php-fpm. För att lösa problemet när det gäller php-fpm behöver du bara lägga till två rader i konfigurationsblocket fastgci:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 betyder 300 sekunder, för de flesta skript är detta tillräckligt, men det är inte heller svårt att ställa in mer om det behövs. 504-felet kan också uppstå när Nginx används som en proxy för Apache eller någon annan webbserver, då måste du också konfigurera väntetiden för proxyn.

Lägg till dessa rader i serveravsnittet:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

I det här fallet har vi en timeout på 600 sekunder.

Nu måste vi starta om Nginx:

$ sudo systemctl restart nginx

En annan anledning och dess lösning om skriptet hänger sig. Om du kör skriptet själv kommer du omedelbart att se vad som hänger, men om ett sådant fel påträffas av användare är det ett allvarligare problem. Du kan se om dina användare stöter på sådana fel och var de uppstår genom att använda kommandot:

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

Mer detaljerad information kan ibland ses i error.log:

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

Om php-fpm är problemet kan du dessutom spåra vilka skript som körs långsamt med hjälp av den inbyggda funktionen slow-log.

För att aktivera den lägger du till följande rader i din poolkonfiguration:

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

Detta avslutar instruktionen.