Betalingsmåter Abuse

Løsning 504 gateway-tidsavbrudd Nginx

20.02.2024, 23:31

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.

Hvorfor 504 Gateway Timeout vises

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:

  • PHP eller et annet språkskript har hengt seg helt opp og vil ikke lenger returnere noe svar;
  • skriptet har kjørt i svært lang tid, men Nginx har et intervall som er konfigurert til å tilbakestille tilkoblingen hvis målserveren ikke har svart på forespørselen innen den tilmålte tiden;
  • Serveren er overbelastet og har ikke tid til å betjene alle klienter og returnere svar på alle Nginx-forespørsler.

La oss nå snakke om hva du kan gjøre og hvordan du fikser 504 Gateway Timeout-feil.

Hvordan fikse 504 gateway timeout Nginx?

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.