64 votes

110 : La connexion a expiré (Nginx/Gunicorn)

J'exécute django sur gunicorn+nginx. Je suis confronté à un problème avec les téléchargements de fichiers. En fait, les téléchargements fonctionnent bien mais gunicorn s'arrête, ce qui provoque ce problème 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 je rafraîchis la page, je vois que toutes les photos sont bien téléchargées. Le problème est qu'il y a un délai d'attente, ce qui donne l'impression que le téléchargement n'a pas fonctionné.

Voici ma conférence sur la licorne :

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 ça n'a pas marché.

95voto

fijter Points 7671

Vous pouvez essayer de mettre à jour le délai d'attente pour le passage du 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 voulez augmenter la limite de temps d'attente sur tous les sites servis par nginx.

Vous devez ajouter --timeout 300 ainsi qu'à votre processus/configuration gunicorn.

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

46voto

ddipasquo Points 485

Il ne s'agit pas d'un dépassement de délai nginx, mais probablement d'un dépassement de délai Gunicorn. Gunicorn utilise par défaut un délai de 30 secondes.

En général, vous devriez éviter d'avoir un point d'accès qui met plus de 30 secondes à revenir, mais s'il s'agit d'un point d'accès rarement utilisé, vous pouvez également augmenter le délai d'attente de gunicorn.

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

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

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

17voto

Amit Talmor Points 221

Nous avons eu le même problème en utilisant Django+nginx+gunicorn. A partir de la documentation de Gunicorn, nous avons configuré le graceful-timeout qui n'a fait presque aucune différence.

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

Alors, faites :

1) ouvrir le fichier de configuration de gunicorn

2) réglez le TIMEOUT sur la valeur que vous souhaitez - la valeur est 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

0voto

Si vous utilisez un proxy inverse avec Nginx et que vous exécutez l'application Django à l'aide de Gunicorn, essayez d'ajuster les paramètres Gunicorn timeout et proxy_read_timeout par rapport aux valeurs par défaut.

-2voto

RLott Points 141

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

Je recevais une erreur de dépassement de délai de la part de nginx et de gunicorn sur mon application Django. Comme je recevais l'erreur de dépassement de temps de nginx, je ne pouvais pas voir la véritable erreur de Django. Après avoir ajouté le nouveau délai d'attente comme fijter l'a suggéré. Je pouvais voir que l'erreur était dans le fichier settings.py.

Si vous avez mis DEBUG à False, et que vous n'avez pas ajouté le nom de domaine dans ALLOWED_HOSTS, vous pouvez obtenir cette erreur.

J'ai simplement ajouté le domaine dans les ALLOWED_HOSTS dans settings.py et l'erreur a disparu.

Une solution très simple !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X