Wie deaktiviere ich das Timeout für Nginx?

46

Auf einem lokalen Entwicklungscomputer habe ich einen Nginx-Reverse-Proxy wie folgt:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

Wenn ich jedoch meine Anwendung debugge, kann es sein, dass die Antwort unendlich lange verzögert ist. Nach 30 Sekunden erhalte ich jedoch Folgendes:

504 Gateway Time-out

als Antwort.

Wie kann ich das Timeout deaktivieren und meinen Reverse Proxy für immer auf eine Antwort warten lassen? Und ich mag es, wenn die Einstellung global ist, damit ich sie nicht für jeden Proxy festlegen muss.

k0pernikus
quelle
1
Starten Sie einen Hintergrundjob und lassen Sie den Benutzer den Status später überprüfen.
Michael Hampton

Antworten:

60

Möglicherweise kann es überhaupt nicht deaktiviert werden. Eine mögliche Problemumgehung besteht jedoch darin, die Ausführungszeit zu verlängern. Auf einer Nginx-Tutorial-Site wurde geschrieben:

Wenn Sie das Zeitlimit für alle Sites auf Ihrem Server erhöhen möchten, können Sie die Hauptdatei bearbeiten nginx.conf:

vim /etc/nginx/nginx.conf

Fügen Sie im Abschnitt http {..} Folgendes hinzu

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

und lade nginx 'config neu:

sudo service nginx reload

Ich habe einen ziemlich großen Wert verwendet, der wahrscheinlich nicht vorkommt, dh 999999oder Zeiteinheiten für einen Tag über 1d.

Beachten Sie, dass das Setzen des Werts auf 0sofort einen Gateway-Timeout-Fehler verursacht.

k0pernikus
quelle
3
Lieber zufälliger Downvoter, ein Kommentar darüber, was an dieser Praxis schlecht ist, wäre nett.
k0pernikus
7
@kb. Es ist lustig, dass ich der OP bin und gerade die praktikabelste Lösung als Antwort gepostet habe, während ich auf eine echte Lösung gewartet habe ^^
k0pernikus
2
Haha, ich habe völlig vermisst, dass Sie OP waren. Aber Ihre Antwort ist die richtige. Sie könnten (für zukünftige Googler wie mich) noch deutlicher machen, dass es keine Möglichkeit gibt, sie zu deaktivieren. =)
kb.
5
Vielen Dank für die Info über 0nicht funktioniert! Beachten Sie, dass Sie Zeiteinheiten mit lesbaren Suffixen angeben können , sodass Sie einen Wert wie verwenden können 1d.
Richtiger Name redigiert
3
Ich habe sowohl das als proxy_connect_timeout 600;auch die Datei nginx.conf hinzugefügt , aber das Timeout beträgt immer noch 60 Sekunden. Sollte ich noch etwas versuchen?
andreszs
9

Wenn Sie AWS und Load Balancer verwenden, sollten Sie das Zeitlimit für Leerlauf bearbeiten. Ich denke, die Standardeinstellung ist 60 Sekunden

szeljic
quelle
Ich verstehe, warum dies abgelehnt wurde, aber wenn die Antwort aktualisiert würde, um den Anwendungsfall zu erläutern, wäre dies nützlicher. Obwohl dies nicht zur Beantwortung des OP führt, ist es nützlich zu prüfen, ob Sie ELB verwenden, da es eine Beschränkung dafür gibt, wie lange eine Verbindung auch offen bleibt.
Doz87
@ doz87 ja, es ist nur etwas zum
Überlegen
Dies ist wirklich eine Überprüfung wert, insbesondere für meinen Fall, dass ich mit Magento unter der AWS arbeite. Guter Punkt @szeljic
vnpnlz
Danke Bruder, das funktioniert für mich, da ich AWS Load Balancer für die Verteilung an meine EC2-Instanz verwende
V
Dies verdient alle positiven Bewertungen - alle AWS-Benutzer sind unabhängig von ihren NGINX-Einstellungen weiterhin auf 60 Sekunden beschränkt
Aphire,
4

Ich habe mit Nginx 502 Timeout-Fehler gekämpft und konnte das Problem nicht lösen. Es handelte sich jedoch zufällig um einen Gunicorn, der den Timeout-Fehler verursachte. Möglicherweise müssen Sie auch Ihre FastCGI-Einstellungen überprüfen.

Für Gunicorn ist es:

gunicorn wsgi:application --timeout 300
Kostyantyn
quelle