Zahlungsmethoden Abuse

Behebung der 504-Gateway-Zeitüberschreitung Nginx

20.02.2024, 23:31

Ein 504-Gateway-Timeout-Fehler in Nginx bedeutet, dass der Server, auf dem Nginx läuft, keine Antwort vom Proxy-Server innerhalb der angegebenen Zeitspanne erhalten konnte. Dies geschieht in der Regel, weil der Proxyserver die Anfrage nicht innerhalb der angegebenen Zeit verarbeiten kann oder weil es Verbindungsprobleme zwischen Nginx und dem Proxyserver gibt.

Warum 504 Gateway Timeout erscheint

Der Fehler tritt auf, wenn der Nginx-Server im Proxy-Modus läuft. Dies geschieht, wenn php-fpm oder Apache verwendet wird. Übersetzt aus dem Englischen ins Russische ergibt sich folgendes Bild: Die Wartezeit auf eine Antwort des Servers wurde überschritten.

Es gibt mehrere Gründe für dieses Verhalten:

  • Das PHP-Skript oder das Skript einer anderen Sprache hat sich komplett aufgehängt und gibt keine Antwort mehr zurück;
  • das Skript läuft schon sehr lange, aber Nginx hat ein Intervall konfiguriert, um die Verbindung zurückzusetzen, wenn der Zielserver nicht innerhalb der vorgegebenen Zeit auf die Anfrage geantwortet hat;
  • der Server ist überlastet und hat nicht die Zeit, alle Clients zu bedienen und Antworten auf alle Nginx-Anfragen zu geben.

Lassen Sie uns nun darüber sprechen, was Sie tun können und wie Sie den 504 Gateway Timeout Fehler beheben können.

Wie behebt man 504 Gateway Timeout Nginx?

Das erste, was Sie in der Praxis ausprobieren sollten, ist, dass Sie, wenn Ihr Server, php-fpm oder Apache zu wenig Systemressourcen hat, wie z.B. Arbeitsspeicher oder CPU, den freien Arbeitsspeicher mit dem Befehl free ermitteln:

$ free -h

Die CPU-Auslastung können Sie mit dem Befehl htop herausfinden:

$ htop

Wenn Sie sehen, dass PHP die gesamte CPU-Zeit beansprucht, bedeutet dies, dass das Problem bei den Serverressourcen liegt. Sie können versuchen, sich mit der Site-Engine zu befassen, die Ressourcen zu optimieren oder einen leistungsstarken VPS-Server zu wählen.

Die zweite Option - wenn es so geplant war, dass das Skript für eine lange Zeit arbeitete. In diesem Fall müssen Sie Nginx so konfigurieren, dass es auf eine Antwort von Apache oder php-fpm wartet. Um das Problem im Falle von php-fpm zu lösen, müssen Sie nur zwei Zeilen in den Konfigurationsblock von fastgci einfügen:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 bedeutet 300 Sekunden, was für die meisten Skripte ausreicht, aber es ist auch nicht schwierig, bei Bedarf mehr einzustellen. Der 504-Fehler kann auch auftreten, wenn Nginx als Proxy für Apache oder einen anderen Webserver verwendet wird, dann müssen Sie auch die Wartezeit für den Proxy konfigurieren.

Fügen Sie diese Zeilen in den Server-Abschnitt ein:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

In diesem Fall haben wir einen Timeout von 600 Sekunden.

Jetzt müssen wir Nginx neu starten:

$ sudo systemctl restart nginx

Ein weiterer Grund und die Lösung, wenn das Skript hängen bleibt. Wenn Sie das Skript selbst ausführen, werden Sie sofort sehen, was passiert, aber wenn ein solcher Fehler bei den Benutzern auftritt, ist das ein ernsthafteres Problem. Mit dem Befehl können Sie sehen, ob Ihre Benutzer auf solche Fehler stoßen und wo sie auftreten:

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

Detailliertere Informationen können manchmal in error.log eingesehen werden:

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

Wenn php-fpm das Problem ist, können Sie außerdem mit der eingebauten slow-log-Funktion feststellen, welche Skripte langsam laufen.

Um sie zu aktivieren, fügen Sie die folgenden Zeilen in Ihre Pool-Konfiguration ein:

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

Damit ist die Anweisung abgeschlossen.