Erreur: 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 [uWSGI/Django/NGINX]
Je suis actuellement TOUJOURS obtenir un 502 sur une requête mes utilisateurs sont en train de faire... ce qui revient habituellement 872 lignes et prend 2.07 à exécuter dans MySQL. Cependant, il est de retour BEAUCOUP d'informations. (Chaque ligne contient beaucoup de choses). Des idées?
De l'exécution de l'Django (tastypie API Rest), Nginx et uWSGI pile.
La configuration du serveur avec NGINX
# the upstream component nginx needs to connect to
upstream django {
server unix:///srv/www/poka/app/poka/nginx/poka.sock; # for a file socket
}
# configuration of the server
server {
# the port your site will be served on
listen 443;
# the domain name it will serve for
server_name xxxx; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 750M; # adjust to taste
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /srv/www/poka/app/poka/nginx/uwsgi_params; # the uwsgi_params file you installed
}
}
UWSGI config
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 2
# the socket (use the full path to be safe
socket = /srv/www/poka/app/poka/nginx/poka.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
# clear environment on exit
vacuum = true
pidfile = /tmp/project-master.pid # create a pidfile
harakiri = 120 # respawn processes taking more than 20 seconds
max-requests = 5000 # respawn processes after serving 5000 requests
daemonize = /var/log/uwsgi/poka.log # background the process & log
log-maxsize = 10000000
#http://uwsgi-docs.readthedocs.org/en/latest/Options.html#post-buffering
post-buffering=1
logto = /var/log/uwsgi/poka.log # background the process & log
- Réponse évidente serait de diviser les données ou augmenter le délai d'attente. N'est-ce pas le travail?
- Où puis-je augmenter ce délai? L'augmentation de la harakiri n'aide pas... il faut que je partage en effet les données dans un futur proche... mais je n'ai pas le temps maintenant ...
- Je suppose 2.07 sont secondes? Rien dans les logs? Exécuter uWSGI HTTP server directement pour voir si uWSGI ou nginx est l'étouffement?
- Ouais en quelques secondes... mais le truc, c'est que 872 lignes n'est rien pour l'instant... il peut atteindre 10 000 dans un proche avenir. Mais l'utilisateur devra obtenir ces 10 000 lignes d'une façon ou d'une autre dans son iPad. Devrais-je commencer à chercher dans l'envoi des données en lots?
Vous devez vous connecter pour publier un commentaire.
Cela est peu être une config nginx question.
C'est presque certainement que le backend est en fait s'écraser (ou tout simplement mettre fin à la connexion), plutôt que de donner un mal formé réponse. c'est à dire le message d'erreur est vous dire quel est le problème, mais vous êtes à la recherche dans le mauvais endroit pour le résoudre.
Vous ne donnez pas suffisamment d'informations pour permettre l'utilisation de comprendre quelle est la cause exacte est, mais si j'avais à deviner:
Il est temps de sortir quelque part ou un manque de mémoire.
J'ai eu le même problème, qu'il fixe pour moi, c'est l'ajout de mon domaine dans le
settings.py par exemple:
Par le même problème, je veux dire que je n'arrivais même pas à charger la page, nginx serait de retour a 502 sans desservant toute les pages où je pourrait provoquer un dysfonctionnement de l'application.
Et la nginx journal de contenait:
Dans votre @django emplacement de bloc, vous pouvez essayer d'ajouter un peu de proxy lire et connect timeout propriétés. par exemple,
Parfois, il peut être un problème d'autorisation. Vérifiez le répertoire de projet de l'autorité.
Il pourrait être un uwsgi problème de configuration au lieu de Nginx. J'ai vu que tu avais uwsgi processus = 2 et harakiri = 120, avez-vous essayé de changer ces ainsi que d'autres champs un par un?
J'ai eu le même problème, mais ce n'était pas mon NGINX configuration, c'était mon UWSGI processus provoquant des erreurs de délai d'attente quand j'ai posté JSONs du côté du client vers le serveur. J'avais processus que 5, je l'ai changé pour 1 et il a résolu le problème. Pour mon application, j'ai seulement besoin d'avoir 1 processus de s'exécuter à temps.
Ici est le travail UWSGI configuration autoboot fichier ini qui a résolu le problème de délai d'attente et donc de l'502 passerelle question (en amont fermé prématurément).
autoboot.ini
Espère que cela aide.