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”
- Comment définir index.html en tant que fichier racine dans Nginx?
- Nginx proxy ou réécriture en fonction de l’agent utilisateur
- Servir des fichiers php à différents endroits dans nginx
- Existe-t-il un moyen de configurer nginx (ou un autre proxy rapide) de manière dynamic?
- configuration correcte pour nginx à localhost?
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/;.*//' )
/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
chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/ # not sure if you have to restart nginx here...