uwsgi + nginx + flacon: en amont de la fermeture prématurée
J'ai créé un point de terminaison sur ma gourde qui génère une feuille de calcul à partir d'une requête de base de données (distance db) et l'envoie ensuite en téléchargement dans le navigateur. Flacon de ne pas jeter des erreurs. Uwsgi ne se plaint pas.
Mais lorsque je vérifie nginx l'erreur.journal, je vois beaucoup de
2014/12/10 05:06:24 [erreur] 14084#0: *239436 en amont prématurément
connexion fermée tout en lisant l'en-tête de réponse à partir de l'amont, du client:
34.34.34.34, serveur: me.com, demande: "GET /download/exportation.csv HTTP/1.1", en amont: "uwsgi://0.0.0.0:5002", l'hôte: "me.com", parrain:
"https://me.com/download/export.csv"
- Je déployer la uwsgi comme
uwsgi --socket 0.0.0.0:5002 --buffer-size=32768 --module server --callab app
ma config nginx:
server {
listen 80;
merge_slashes off;
server_name me.com www.me.cpm;
location / { try_files $uri @app; }
location @app {
include uwsgi_params;
uwsgi_pass 0.0.0.0:5002;
uwsgi_buffer_size 32k;
uwsgi_buffers 8 32k;
uwsgi_busy_buffers_size 32k;
}
}
server {
listen 443;
merge_slashes off;
server_name me.com www.me.com;
location / { try_files $uri @app; }
location @app {
include uwsgi_params;
uwsgi_pass 0.0.0.0:5002;
uwsgi_buffer_size 32k;
uwsgi_buffers 8 32k;
uwsgi_busy_buffers_size 32k;
}
}
Est-ce un nginx ou uwsgi question, ou les deux?
uwsgi_params
fichier sous nginx confsOriginalL'auteur user299709 | 2014-12-10
Vous devez vous connecter pour publier un commentaire.
Changement de nginx.conf pour inclure
Voir auto-réponse uwsgi arriviste sur amazon linux pour exemple complet
OriginalL'auteur tourdownunder
Dans mon cas, le problème a été nginx a été l'envoi d'une demande avec uwsgi protocole tout uwsgi a été à l'écoute sur ce port pour les paquets http. Donc, soit j'ai dû changer la façon de nginx se connecte à uwsgi ou de modifier le uwsgi à écouter à l'aide uwsgi protocole.
uwsgi_pass
et puis définissez lasocket
valeur du port dans le uwsgi .fichier ini OUproxy_pass
dans nginx avec réglagehttp-socket
pour le port de uwsgi?OriginalL'auteur mahdix
Remplacer
uwsgi_pass 0.0.0.0:5002;
avecuwsgi_pass 127.0.0.1:5002;
ou une meilleure utilisation des sockets unix.OriginalL'auteur jwalker
Il semble que de nombreuses causes peuvent se tenir derrière ce message d'erreur. Je sais que vous êtes en utilisant
uwsgi_pass
, mais pour ceux qui ont le problème sur le long demandes lorsque vous utilisezproxy_pass
, réglagehttp-timeout
sur uWSGI peut aider (il n'est pas harakiri).OriginalL'auteur krzychu
Comme mentionné par @mahdix, l'erreur peut être provoquée par Nginx l'envoi d'une demande auprès de l'uwsgi protocole tout uwsgi est à l'écoute sur ce port pour les paquets http.
Lorsque dans la config Nginx vous avez quelque chose comme:
Nginx va utiliser le uwsgi protocole. Mais si dans
uwsgi.ini
vous avez quelque chose comme (ou son équivalent en ligne de commande):uwsgi sera parler http, et le message d'erreur mentionné dans la question s'affiche. Voir HTTP natif de soutien.
Une solution possible est d'avoir de la place:
Auquel cas Nginx et uwsgi permettra de communiquer avec les autres en utilisant le uwsgi protocole sur une connexion TCP.
Note de côté: si Nginx et uwsgi sont dans le même nœud, une socket Unix sera plus rapide que TCP. Voir en utilisant les sockets Unix au lieu de ports.
OriginalL'auteur Ivan Ogai
J'ai résolu ce problème en passant
socket-timeout = 65
(uwsgi.fichier ini) ou--socket-timeout=65
(uwsgi ligne de commande) dans uwsgi. Nous devons vérifier avec différentes valeur dépend du trafic web. Cette valeursocket-timeout = 65
dans uwsgi.fichier ini a fonctionné dans mon cas.OriginalL'auteur Sathish
J'ai eu le même sporadique des erreurs dans Elastic Beanstalk seul conteneur Docker WSGI déploiement des applications. Sur l'instance EC2 de l'environnement en amont de la configuration ressemble à:
Avec ce défaut en amont simple test de charge comme:
...sur l'EC2 conduit à la disponibilité de ~70%. Le reste de 502 erreurs causées par en amont de la fermeture prématurée de la connexion lors de la lecture de la réponse de l'en-tête de l'amont.
La solution a été de supprimer
keepalive
réglage de l'amont de la configuration, ou ce qui est plus facile et plus raisonnable, est de permettre HTTP keep-alive àuWSGI
s'à côté, avec--http-keepalive
(disponible depuis la 1.9).OriginalL'auteur saaj