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.
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:
Lad os nu tale om, hvad du kan gøre, og hvordan du løser 504 Gateway Timeout-fejlen.
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.