web-dev-qa-db-fra.com

Problème de temporisation Gunicorn Nginx

Je cours Django sur gunicorn + nginx. Je suis confronté à un problème avec les téléchargements de fichiers. En fait, les uploads fonctionnent bien, mais gunicorn a expiré, ce qui a causé ceci dans nginx:

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"

Si j'actualise la page, je peux voir que toutes les photos sont téléchargées correctement. Le problème est que cela provoque un délai d'attente, donnant ainsi l'impression que le téléchargement n'a pas fonctionné.

voici mon config gunicorn:

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

J'ai essayé de changer le délai d'attente mais cela n'a pas fonctionné.

54
user250145

Vous pouvez essayer de mettre à niveau le délai d’expiration de votre passe proxy dans Nginx en ajoutant:

proxy_connect_timeout 75s;
proxy_read_timeout 300s;

sur/var/nginx/sites-available/[site-config] ou /var/nginx/nginx.conf si vous souhaitez augmenter le délai d'expiration sur tous les sites desservis par nginx.

Vous devez également ajouter --timeout 300 à votre processus/configuration gunicorn.

Cela a résolu mes problèmes dans le passé avec de plus gros téléchargements.

81
fijter

Ce n'est pas un timeout nginx, mais probablement un timeout Gunicorn. Gunicorn a par défaut un délai d'attente de 30 secondes.

En règle générale, vous devriez résoudre ce problème en ne disposant pas de terminal prenant plus de 30 secondes pour revenir, mais s'il s'agit d'un terminal rarement utilisé, vous pouvez simplement augmenter le délai d'expiration de gunicorn. 

Si vous faites cela, vous devriez aussi probablement aussi augmenter le nombre de processus de travail de gunicorn.

Pour augmenter le délai d'attente et le nombre d'utilisateurs pour gunicorn, vous pouvez ajouter les options de ligne de commande suivantes au démarrage:

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

Nous avons eu le même problème avec Django + nginx + gunicorn . Selon la documentation de Gunicorn, nous avons configuré le délai d’attente qui ne fait presque aucune différence.

Après quelques tests, nous avons trouvé la solution, le paramètre à configurer est le suivant: timeout (Et non pas timeout gracieux). Cela fonctionne comme une horloge ..

Alors faites:

1) ouvrez le fichier de configuration gunicorn

2) réglez le TIMEOUT sur tout ce dont vous avez besoin - la valeur est exprimée en secondes

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

Cela pourrait aider quelqu'un avec un problème similaire.

J'obtenais une erreur de timeout de nginx et gunicorn sur mon application Django. Étant donné que je recevais l'erreur de timeout de nginx, je ne pouvais pas voir la véritable erreur de Django. Après avoir ajouté le nouveau délai d’attente suggéré par le fijter. Je pouvais voir que l'erreur était dans le fichier settings.py.

Si vous définissez DEBUG sur False et que vous n'avez pas ajouté le nom de domaine dans ALLOWED_HOSTS, vous risquez d'obtenir cette erreur.

Je viens d'ajouter le domaine dans ALLOWED_HOSTS dans settings.py et l'erreur a disparu.

Solution très simple!

0
RLott