Frage Wie deaktiviert man das Timeout für nginx?


Auf einer lokalen Entwicklungsmaschine, Ich habe einen Nginx-Reverse-Proxy so:

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 sich die Antwort um eine unendliche Zeit verzögern, aber nach 30 Sekunden bekomme ich:

504 Gateway Time-out

als Antwort.

Wie kann ich das Zeitlimit deaktivieren und meinen Reverse-Proxy für eine Antwort warten lassen? Und ich mag die Einstellung als global, so dass ich sie nicht für jeden Proxy einstellen muss.


22
2018-05-19 12:35


Ursprung


Erwägen Sie, einen Hintergrundjob zu starten, und lassen Sie den Benutzer später seinen Status überprüfen. - Michael Hampton♦


Antworten:


Es ist möglicherweise nicht möglich, es überhaupt zu deaktivieren, aber eine mögliche Abhilfe besteht darin, die Ausführungszeit zu erhöhen. Auf einen nginx Tutorial-Seite, es wurde geschrieben:

Wenn Sie das Zeitlimit für alle Sites auf Ihrem Server erhöhen möchten,   kann main bearbeiten nginx.conf Datei:

vim /etc/nginx/nginx.conf

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

http {
     fastcgi_read_timeout 300;
}

und lade nginx 'config neu:

sudo service nginx reload

Ich habe einen ziemlich großen Wert verwendet, der unwahrscheinlich ist, d. H. 999999. (Den Wert auf einstellen 0 ergibt ein sofortiges Gateway-Timeout.)


27
2018-05-19 12:50



Lieber zufälliger Downvoter, ein Kommentar zu dem, was an dieser Übung schlecht ist, wäre nett. - k0pernikus
@ kb. Es ist witzig, dass ich das OP bin und gerade die praktikabelste Problemumgehung als Antwort gepostet habe, während ich auf eine echte Lösung gewartet habe ^^ - k0pernikus
Haha, ich habe komplett vermisst, dass du OP warst. Aber deine Antwort ist die richtige, du könntest es noch klarer machen (für zukünftige Googler wie mich), dass es keine Möglichkeit gibt, sie zu deaktivieren. =) - kb.
Danke für die Info über 0 funktioniert nicht! Beachten Sie, dass Sie können Zeiteinheiten mit lesbaren Suffixen angeben, also könnten Sie einen Wert wie verwenden 1d. - Brandon Mintern
Ich habe beides hinzugefügt und proxy_connect_timeout 600; in die nginx.conf-Datei, aber das Timeout ist immer noch 60 Sekunden. Sonst sollte ich es versuchen? - andreszs


Wenn Sie AWS und Load Balancer verwenden, sollten Sie das Leerlaufzeitlimit bearbeiten. Ich denke Standard ist 60 Sekunden


3
2018-05-10 12:11



ich verstehe Warum Dies wurde abgelehnt, aber vielleicht, wenn die Antwort aktualisiert wurde, um ihren Anwendungsfall zu erklären, wäre es nützlicher. Obwohl dies nicht das OP beantworten soll, ist es nützlich, wenn Sie ELB verwenden, da es eine Grenze gibt, wie lange sie eine Verbindung offen halten. - doz87
@ doz87 ja, es ist nur etwas für die Betrachtung - szeljic


Ich habe mit Nginx 502 Timeout-Fehler gekämpft und konnte das Problem nicht lösen. Es ist jedoch passiert, dass Gunicorn den Timeout-Fehler verursacht hat. Daher müssen Sie möglicherweise auch Ihre Fastcgi-Einstellungen überprüfen.

Für Gunicorn ist es:

gunicorn wsgi:application --timeout 300

2
2017-07-03 23:11