En 504 Gateway Timeout-feil i Nginx betyr at serveren som kjører Nginx, ikke var i stand til å motta et svar fra proxy-serveren innen den angitte tidsperioden. Dette skjer vanligvis fordi proxy-serveren ikke kan behandle forespørselen innen den angitte tiden, eller på grunn av tilkoblingsproblemer mellom Nginx og proxy-serveren.
Feilen oppstår når Nginx-serveren kjører i proxy-modus. Dette skjer når php-fpm eller Apache brukes. Hvis vi oversetter det fra engelsk til russisk, får vi følgende - tiden for å vente på svar fra serveren er overskredet.
Det er flere grunner til denne oppførselen:
La oss nå snakke om hva du kan gjøre og hvordan du fikser 504 Gateway Timeout-feil.
Det første du kan prøve i praksis er at hvis serveren din, php-fpm eller apache mangler systemressurser, for eksempel minne eller CPU, kan du se ledig
RAM ved hjelp av kommandoen free:
$ free -h
Du kan finne ut CPU-belastningen med htop-kommandoen
:
$ htop
Hvis du ser at PHP tar opp all CPU-tiden, betyr det at problemet ligger i serverressursene. Du kan prøve å gjøre noe med nettstedsmotoren, optimalisere ressursen eller velge en kraftig VPS-server.
Det andre alternativet - hvis det var planlagt slik at skriptet fungerte i lang tid. I dette tilfellet må du konfigurere Nginx for å vente på svar fra Apache eller php-fpm. For å løse problemet i tilfelle php-fpm, trenger du bare å legge til to linjer i fastgci-konfigurasjonsblokken:
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
300 betyr 300 sekunder, for de fleste skript er dette nok, men det er heller ikke vanskelig å angi mer hvis det er nødvendig. 504-feilen kan også oppstå når Nginx brukes som en proxy for Apache eller en annen webserver, og da må du også konfigurere ventetiden for proxyen.
Legg til disse linjene i serverseksjonen
:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
I dette tilfellet har vi en timeout på 600 sekunder.
Nå må vi starte Nginx på nytt:
$ sudo systemctl restart nginx
En annen grunn og løsningen hvis skriptet henger. Hvis du kjører skriptet selv, vil du umiddelbart se hva som henger, men hvis en slik feil oppstår av brukerne, er det et mer alvorlig problem. Du kan se om brukerne dine støter på slike feil, og hvor de oppstår, ved å bruke kommandoen:
$ fgrep -i " 504 " /var/log/nginx/access.log
Mer detaljert informasjon kan noen ganger finnes i error.log:
$ fgrep -i " 504 " /var/log/nginx/error.log
Hvis php-fpm er problemet, kan du dessuten spore hvilke skript som kjører sakte ved hjelp av den innebygde slow-log-funksjonen
.
For å aktivere den legger du til følgende linjer i bassengkonfigurasjonen:
$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s
Dette fullfører instruksjonen.