Betalingsmetoder Abuse

Fix 504 gateway time out Nginx

20.02.2024, 23:31

En 504 Gateway Timeout-fejl i Nginx betyder, at serveren, der kører Nginx, ikke var i stand til at modtage et svar fra proxyserveren inden for den angivne tidsperiode. Dette sker normalt, fordi proxyserveren ikke kan behandle anmodningen inden for den angivne tid eller på grund af forbindelsesproblemer mellem Nginx og proxyserveren.

Hvorfor 504 Gateway Timeout vises

Fejlen opstår, når Nginx-serveren kører i proxy-tilstand. Det sker, når php-fpm eller Apache bruges. Hvis vi oversætter det fra engelsk til russisk, får vi følgende - tiden til at vente på et svar fra serveren er overskredet.

Der er flere grunde til denne opførsel:

  • PHP eller et andet sprogscript er gået helt i stå og vil ikke længere returnere noget svar;
  • scriptet kører i meget lang tid, men Nginx har et interval, der er konfigureret til at nulstille forbindelsen, hvis målserveren ikke har svaret på anmodningen inden for den tildelte tid;
  • Serveren er overbelastet og har ikke tid til at betjene alle klienter og returnere svar på alle Nginx-anmodninger.

Lad os nu tale om, hvad du kan gøre, og hvordan du løser 504 Gateway Timeout-fejlen.

Hvordan løser man 504 gateway timeout Nginx?

Den første ting, du skal prøve i praksis, er, at hvis din server, php-fpm eller apache mangler systemressourcer, f.eks. hukommelse eller CPU, skal du se den ledige RAM ved hjælp af kommandoen free:

$ free -h

Du kan finde ud af CPU-belastningen med htop-kommandoen:

$ htop

Hvis du ser, at PHP optager al CPU-tiden, betyder det, at problemet ligger i serverens ressourcer. Du kan prøve at gøre noget ved webstedets motor, optimere ressourcerne eller vælge en kraftig VPS-server.

Den anden mulighed - hvis det var planlagt, at scriptet skulle fungere i lang tid. I dette tilfælde skal du konfigurere Nginx til at vente på et svar fra Apache eller php-fpm. For at løse problemet med php-fpm behøver du kun at tilføje to linjer til fastgci-konfigurationsblokken:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 betyder 300 sekunder, og for de fleste scripts er det nok, men det er heller ikke svært at indstille mere, hvis det er nødvendigt. 504-fejlen kan også opstå, når Nginx bruges som proxy for Apache eller en anden webserver, og så skal du også konfigurere ventetiden for proxyen.

Tilføj disse linjer til serversektionen:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

I dette tilfælde har vi en timeout på 600 sekunder.

Nu skal vi genstarte Nginx:

$ sudo systemctl restart nginx

En anden grund og en løsning, hvis scriptet hænger. Hvis du selv kører scriptet, vil du straks se, hvad der hænger, men hvis brugerne støder på en sådan fejl, er det et mere alvorligt problem. Du kan se, om dine brugere støder på sådanne fejl, og hvor de opstår, ved at bruge kommandoen:

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

Mere detaljerede oplysninger kan nogle gange ses i error.log:

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

Hvis php-fpm er problemet, kan du desuden spore, hvilke scripts der kører langsomt, ved hjælp af den indbyggede slow-log-funktion.

For at aktivere den skal du tilføje følgende linjer til din pool-konfiguration:

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

Dette afslutter instruktionen.