Délai d’expiration nginx lorsque uWSGI met longtemps à traiter une demande

J’ai Nginx + uWSGI pour Python Django app.

J’ai le suivant dans mon nginx.conf :

 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; uwsgi_read_timeout 1800; uwsgi_send_timeout 300; client_header_timeout 300; proxy_read_timeout 300; index index.html index.htm; } 

mais pour les requêtes de longue durée sur uWSGI qui prennent environ 1 minute, je reçois une erreur de timeout dans le journal des erreurs Nginx comme ci-dessous:

2013/04/22 12:35:56 [erreur] 2709 # 0: * 1 en amont expiré (110: connexion expirée) lors de la lecture de l’en-tête de réponse en amont, client: xx.xx.xx.xx, serveur:, requête : “GET / entity / datasenders / HTTP / 1.1”, en amont: “uwsgi: //127.0.0.1: 9001”, hôte: “xxx.xx.xx.x”

J’ai déjà défini le délai d’attente de l’en-tête et le uWSGI envoie / lit les délais d’attente à 5 minutes, quelqu’un peut-il s’il vous plaît me dire ce que je peux faire pour surmonter cela?

La configuration qui résout le problème est la suivante:

 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; uwsgi_read_timeout 300; index index.html index.htm; } 

La raison pour laquelle la configuration ci-dessus dans la question n’a pas fonctionné pour nous parce que, malheureusement, dans notre machine, plusieurs chemins avaient nginx.conf fichier nginx.conf . Nous travaillions avec la conf sur le mauvais chemin.

Pour déterminer correctement le chemin emprunté par nginx dans la configuration:

 nginx -V # V is caps 

ceci aura un --conf-path=[] qui vous dira exactement d’où il prend la configuration.

J’ai récemment trouvé le nginx -V ci-dessus pour ne pas donner les bonnes informations. Je laisserai ce qui précède au cas où d’autres le trouveraient utile.

En plus de la réponse “uwsgi_read_timeout”, vous devez également vérifier que la propriété est correcte pour votre répertoire de cache nginx uwsgi. La propriété doit être définie sur le même utilisateur que le processus nginx en cours d’exécution. Dans mon cas, je devais le faire

 grep '^user' /etc/nginx/nginx.conf ls -lah /var/cache/nginx/uwsgi_temp for f in $( find /var/cache/nginx/uwsgi_temp ); do ls -lah $f; done 

Ces fichiers appartiennent-ils au même utilisateur? Sinon, vous pouvez arrêter nginx et supprimer tous les fichiers de cache, assurez-vous que le propriétaire approprié est sur / var / cache / nginx / uwsgi_temp et redémarrez. Peut-être que vous pourriez aussi simplement faire un chéri récursif, je n’ai pas testé cette approche.

 # store the user THEUSER=$(grep '^user' /etc/nginx/nginx.conf | sed 's/.* //; s/;.*//' ) 

Supprimer le cache et redémarrer l’approche

 /etc/init.d/nginx stop rm -rf /var/cache/nginx/uwsgi_temp/* chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp /etc/init.d/nginx start 

Approche récursive de la tente

 chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/ # not sure if you have to restart nginx here...