Ich habe Puma als Upstream-App-Server und Riak als Hintergrund-DB-Cluster. Wenn ich eine Anfrage sende, die einen Datenblock für etwa 25.000 Benutzer auf der Karte reduziert und von Riak an die App zurückgibt, wird im Nginx-Protokoll eine Fehlermeldung angezeigt:
Zeitüberschreitung beim Upstream (110: Zeitüberschreitung der Verbindung) beim Lesen des Antwortheaders vom Upstream
Wenn ich meinen Upstream direkt ohne Nginx-Proxy mit derselben Anfrage abfrage, erhalte ich die erforderlichen Daten.
Das Nginx-Timeout tritt auf, sobald der Proxy eingegeben wurde.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
Nginx hat eine Reihe von Timeout-Anweisungen. Ich weiß nicht, ob mir etwas Wichtiges fehlt. Jede Hilfe wäre sehr dankbar ....
Antworten:
Dies liegt daran, dass Ihr Upstream zu viel Zeit benötigt, um die Anfrage zu beantworten, und NGINX glaubt, dass der Upstream die Anfrage bereits nicht verarbeitet hat, und antwortet daher mit einem Fehler. Fügen Sie einfach proxy_read_timeout in den
location
Konfigurationsblock ein und erhöhen Sie ihn . Das Gleiche ist mir passiert und ich habe 1 Stunde Timeout für eine interne App bei der Arbeit verwendet:Damit wartet NGINX eine Stunde (3600s), bis sein Upstream etwas zurückgibt.
quelle
proxy_read_timeout
im Abschnitt http möglicherweise nicht hilfreich ist. Ich habe dieproxy_pass
Direktive im Standortbereich und nur dort hat dieproxy_read_timeout
Einstellung einen Unterschied gemacht. (Nginx 1.16.0)Sie sollten es immer unterlassen, die Zeitüberschreitungen zu erhöhen. Ich bezweifle, dass Ihre Backend-Server-Antwortzeit hier auf jeden Fall das Problem ist.
Ich habe dieses Problem umgangen, indem ich das Verbindungs-Keep-Alive-Flag gelöscht und die http-Version gemäß der Antwort hier angegeben habe: https://stackoverflow.com/a/36589120/479632
Leider kann ich nicht erklären, warum dies funktioniert, und habe es auch nicht geschafft, es aus den in der Antwort verlinkten Dokumenten zu entschlüsseln. Wenn also jemand eine Erklärung hat, wäre ich sehr interessiert, sie zu hören.
quelle
proxy_read_timeout
wenn Sie wissen, dass der Proxy (wenn auch nur für eine bestimmte URL) mehr Verarbeitungszeit benötigt?$http_host
Recht geändert ? Ich vermute, das würde nicht für https fliegen. Möglicherweise sind auch zusätzliche Einstellungen für die Weitergabe von https-Anforderungen erforderlich.Stellen Sie zunächst anhand der Nginx-Fehlerprotokolldatei fest, welcher Upstream langsamer wird, und passen Sie die Lesezeit entsprechend an, in meinem Fall war es fastCGI
Also muss ich das fastcgi_read_timeout in meiner Serverkonfiguration anpassen
Siehe: Originalbeitrag
quelle
In Ihrem Fall hilft es eine kleine Optimierung im Proxy, oder Sie können "# Timeout-Einstellungen" verwenden.
quelle
proxy_pass
im Standortbereich hatte .Ich denke, dieser Fehler kann aus verschiedenen Gründen auftreten, aber er kann spezifisch für das von Ihnen verwendete Modul sein. Zum Beispiel habe ich dies mit dem uwsgi-Modul gesehen, musste also "uwsgi_read_timeout" setzen.
quelle
Ich würde empfehlen, sich den
error_logs
, insbesondere den Upstream- Teil anzusehen, in dem ein spezifischer Upstream angezeigt wird, bei dem eine Zeitüberschreitung auftritt.Darauf basierend können Sie dann einstellen
proxy_read_timeout
,fastcgi_read_timeout
oderuwsgi_read_timeout
.Stellen Sie außerdem sicher, dass Ihre Konfiguration geladen ist.
Weitere Details hier Nginx Upstream Timeout (warum und wie zu beheben)
quelle
Wie viele andere hier bereits betont haben, kann das Erhöhen der Timeout-Einstellungen für NGINX Ihr Problem lösen.
Das Erhöhen Ihrer Timeout-Einstellungen ist jedoch möglicherweise nicht so einfach, wie viele dieser Antworten vermuten lassen. Ich selbst war mit diesem Problem konfrontiert und habe versucht, meine Timeout-Einstellungen in der Datei /etc/nginx/nginx.conf zu ändern , wie fast jeder in diesen Threads vorschlägt. Das hat mir kein bisschen geholfen; Es gab keine offensichtliche Änderung der Timeout-Einstellungen von NGINX. Jetzt, viele Stunden später, konnte ich dieses Problem endlich beheben.
Die Lösung liegt in diesem Forenthread und es heißt, dass Sie Ihre Timeout-Einstellungen in /etc/nginx/conf.d/timeout.conf ablegen sollten (und wenn diese Datei nicht vorhanden ist, sollten Sie sie erstellen). Ich habe die gleichen Einstellungen verwendet, wie im Thread vorgeschlagen:
quelle
Ich hatte das gleiche Problem und stellte fest, dass dies ein "täglicher" Fehler in der Schienensteuerung war. Ich weiß nicht warum, aber in der Produktion führt puma den Fehler immer wieder aus und verursacht die folgende Meldung:
Zeitlimit für Upstream (110: Zeitlimit für Verbindung) beim Lesen des Antwortheaders vom Upstream
Wahrscheinlich, weil Nginx immer wieder versucht, die Daten von Puma abzurufen. Das Lustige ist, dass der Fehler die Timeout-Meldung verursacht hat, selbst wenn ich eine andere Aktion im Controller aufrufe. Daher blockiert ein einziger Tippfehler die gesamte App.
Überprüfen Sie in Ihrer Datei log / puma.stderr.log, ob dies der Fall ist.
quelle
Von unserer Seite wurde spdy mit Proxy-Cache verwendet. Wenn der Cache abläuft, wird dieser Fehler angezeigt, bis der Cache aktualisiert wurde.
quelle
Hoffentlich hilft es jemandem: Ich bin auf diesen Fehler gestoßen und die Ursache war eine falsche Berechtigung für den Protokollordner für phpfpm. Nachdem ich ihn geändert hatte, damit phpfpm darauf schreiben konnte, war alles in Ordnung.
quelle
Für eine
proxy_upstream
Zeitüberschreitung habe ich die obige Einstellung ausprobiert, aber diese hat nicht funktioniert.Die Einstellung
resolver_timeout
funktionierte für mich, da ich wusste, dass es 30 Sekunden dauerte, bis die Upstream-Timeout-Nachricht erstellt wurde. ZB me.atwibble.com nicht aufgelöst werden konnte (110: Operation timed out) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
quelle