webentwicklung-frage-antwort-db.com.de

Gunicorn Nginx Timeout Problem

Ich lasse Django auf Gunicorn + Nginx laufen. Ich habe ein Problem mit Datei-Uploads. Eigentlich funktionieren Uploads gut, aber gunicorn läuft aus, was zu nginx führt:

2011/07/25 12:13:47 [error] 15169#0: *2317 upstream timed out (110: Connection timed out) while reading response header from upstream, client: IP-ADDRESS, server: SERVER, request: "GET /photos/events/event/25 HTTP/1.1", upstream: "http://127.0.0.1:29000/photos/events/event/25", Host: "Host", referrer: "REFERER_ADDRESS"

Wenn ich die Seite aktualisiere, kann ich sehen, dass alle Fotos gut hochgeladen wurden. Das Problem ist, dass dies zu einer Zeitüberschreitung führt, wodurch der Eindruck entsteht, dass der Upload nicht funktioniert hat.

hier ist mein gunicorn conf:

bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3

Ich habe versucht, das Timeout zu ändern, aber es hat nicht funktioniert.

54
user250145

Sie können versuchen, das Timeout für Ihren Proxy-Pass in Nginx zu aktualisieren, indem Sie Folgendes hinzufügen:

proxy_connect_timeout 75s;
proxy_read_timeout 300s;

auf/var/nginx/sites-available/[site-config] oder /var/nginx/nginx.conf, wenn Sie die Zeitlimitüberschreitung auf allen von nginx bedienten Sites erhöhen möchten.

Sie müssen auch --timeout 300 zu Ihrem gunicorn process/config hinzufügen.

Dies löste meine Probleme in der Vergangenheit mit größeren Uploads.

81
fijter

Dies ist kein Nginx-Timeout, sondern wahrscheinlich ein Gunicorn-Timeout. Gunicorn hat standardmäßig ein Timeout von 30 Sekunden.

Im Allgemeinen sollten Sie dies beheben, indem Sie keinen Endpunkt haben, der länger als 30 Sekunden dauert, um zurückzukehren. Wenn es sich jedoch um einen selten verwendeten Endpunkt handelt, können Sie auch das Zeitlimit für die Netzwerkabnahme erhöhen. 

Wenn Sie dies tun, sollten Sie wahrscheinlich auch die Anzahl der Gunicorn-Arbeitsprozesse erhöhen.

Um das Timeout und die Anzahl der Worker für Gunicorn zu erhöhen, können Sie beim Start die folgenden Befehlszeilenoptionen hinzufügen:

gunicorn --timeout 120 --workers <NUMBER OF WORKER YOU WANT>
31
ddipasquo

Das gleiche Problem hatten wir bei der Verwendung von Django + Nginx + Gunicorn . Aus der Gunicorn-Dokumentation haben wir das anmutige Timeout konfiguriert, das fast keinen Unterschied machte.

Nach einigen Tests haben wir die Lösung gefunden. Der zu konfigurierende Parameter ist: timeout (Und kein elegantes Timeout). Es funktioniert wie eine Uhr ..

Dann mach's:

1) öffne die gunicorn Konfigurationsdatei

2) Stellen Sie TIMEOUT auf das, was Sie benötigen - der Wert ist in Sekunden

NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${Django_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE
15
Amit Talmor

Dies könnte jemandem mit ähnlichen Problemen helfen.

Ich habe bei meiner Django-Anwendung Timeout-Fehler von Nginx und Gunicorn erhalten. Da ich den Timeout-Fehler von nginx bekam, konnte ich den echten Fehler von Django nicht sehen. Nach dem Hinzufügen des neuen Timeouts wie vorgeschlagen. Ich konnte sehen, dass der Fehler in der Datei settings.py war.

Wenn Sie den DEBUG auf False setzen und den Domänennamen nicht in ALLOWED_HOSTS hinzugefügt haben, wird diese Fehlermeldung möglicherweise angezeigt.

Ich habe gerade die Domäne in ALLOWED_HOSTS in settings.py hinzugefügt und der Fehler war verschwunden.

Sehr einfache Lösung!

0
RLott