Een 504 Gateway Timeout fout in Nginx betekent dat de server waarop Nginx draait niet in staat was om een antwoord van de proxyserver te ontvangen binnen de opgegeven tijdsperiode. Dit gebeurt meestal omdat de proxyserver het verzoek niet binnen de opgegeven tijd kan verwerken of vanwege verbindingsproblemen tussen Nginx en de proxyserver.
De fout treedt op wanneer de Nginx server in proxy modus draait. Dit gebeurt wanneer php-fpm of Apache wordt gebruikt. Als we het vertalen van het Engels naar het Russisch, krijgen we het volgende - de tijd om te wachten op een antwoord van de server is overschreden.
Er zijn verschillende redenen voor dit gedrag:
Laten we het nu hebben over wat je kunt doen en hoe je 504 Gateway Timeout fout kunt oplossen.
Het eerste wat je in de praktijk kunt proberen is dat als je server, php-fpm of apache te weinig systeembronnen heeft, zoals geheugen of CPU, bekijk dan het vrije
RAM met het free commando:
$ free -h
Je kunt de CPU-belasting achterhalen met het htop
commando:
$ htop
Als je ziet dat PHP alle CPU-tijd in beslag neemt, dan betekent dit dat het probleem bij de serverbronnen ligt. Je kunt proberen de site-engine aan te pakken, de bronnen te optimaliseren of een krachtige VPS-server te kiezen.
De tweede optie - als het zo was gepland dat het script lange tijd werkte. In dit geval moet je Nginx configureren om te wachten op een antwoord van Apache of php-fpm. Om het probleem op te lossen in het geval van php-fpm, hoef je maar twee regels toe te voegen aan het configuratieblok van fastgci:
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
300 betekent 300 seconden, voor de meeste scripts is dit genoeg, maar het is ook niet moeilijk om meer in te stellen als dat nodig is. De 504 fout kan ook optreden als Nginx wordt gebruikt als proxy voor Apache of een andere webserver, dan moet je ook de proxy timeout instellen.
Voeg deze regels toe aan de serversectie
:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
In dit geval hebben we een time-out van 600 seconden.
Nu moeten we Nginx herstarten:
$ sudo systemctl restart nginx
Een andere reden en de oplossing als het script hangt. Als je het script zelf uitvoert, zie je meteen wat er hangt, maar als gebruikers zo'n foutmelding tegenkomen, is dat een ernstiger probleem. Je kunt zien of je gebruikers zulke fouten tegenkomen en waar ze optreden door het commando te gebruiken:
$ fgrep -i " 504 " /var/log/nginx/access.log
Meer gedetailleerde informatie is soms te zien in error.log
:
$ fgrep -i " 504 " /var/log/nginx/error.log
Verder, als php-fpm het probleem is, kun je bijhouden welke scripts traag draaien met de ingebouwde slow-log
functie.
Om deze te activeren, voeg je de volgende regels toe aan je poolconfiguratie:
$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s
Hiermee is de instructie voltooid.