web-dev-qa-db-fra.com

Erreur: connexion en amont fermée prématurément lors de la lecture de l'en-tête de réponse depuis l'amont [uWSGI/Django/NGINX]

Actuellement, je reçois TOUJOURS un 502 sur une requête de mes utilisateurs ... qui renvoie généralement 872 lignes et prend 2,07 à MySQL. Il retourne cependant BEAUCOUP d’informations. (Chaque ligne contient beaucoup de choses). Des idées?

Exécution des piles Django (tastypie Rest API), Nginx et uWSGI.

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
21
abisson

Il est peu probable que ce soit un problème de configuration de nginx. 

Il est presque certain que le serveur est en train de planter (ou juste de mettre fin à la connexion) plutôt que de donner une réponse mal formée. c'est-à-dire que le message d'erreur vous dit quel est le problème, mais que vous cherchez au mauvais endroit pour le résoudre.

Vous ne donnez pas assez d'informations pour permettre à l'utilisateur de déterminer le problème exact, mais si je devais deviner:

qui retourne généralement 872 lignes et prend 2,07 à MySQL. Il retourne cependant BEAUCOUP d’informations.

C'est soit une fin de mémoire, soit une mémoire insuffisante. 

12
Danack

J'ai eu le même problème, ce qui l'a résolu pour moi est l'ajout de mon domaine dans le settings.py par exemple.:

ALLOWED_HOSTS = ['.mydomain.com', '127.0.0.1', 'localhost']

Par le même problème, je veux dire que je ne pouvais même pas charger la page, nginx renverrait un 502 sans afficher de pages où je pourrais provoquer le blocage de l'application.

Et le journal nginx contenait: 

Error: upstream prematurely closed connection while reading response header from upstream
6
emazzotta

Dans votre bloc d'emplacement @ Django, vous pouvez essayer d'ajouter des propriétés de délai de lecture et de connexion du proxy. par exemple.

location @Django {
   proxy_read_timeout 300;
   proxy_connect_timeout 300;
   proxy_redirect off;

   # proxy header definitions
   ...
   proxy_pass http://Django;
}
1
user553620

Il pourrait s'agir d'un problème de configuration d'Uwsgi au lieu de Nginx. J'ai vu que vous aviez des processus uwsgi = 2 et harakiri = 120, avez-vous essayé de les changer un par un?

J'avais le même problème, mais ce n'était pas ma configuration NGINX, c'était mes processus UWSGI qui provoquaient des erreurs de dépassement de délai lorsque je publiais des JSON du côté client au serveur. J'ai eu des processus en tant que 5, je l'ai changé à 1 et cela a résolu le problème. Pour mon application, je n'avais besoin que d'un processus à la fois. 

Voici le fichier ini de démarrage automatique de la configuration UWSGI qui a résolu le problème du délai d'attente et, partant, celui de la passerelle 502 (en amont fermé prématurément).

autoboot.ini

#!/bin/bash

[uwsgi]
socket          = /tmp/app.sock

master          = true

chmod-socket    = 660
module          = app.wsgi
chdir           = home/app

close-on-exec = true # Allow linux Shell via uWSGI

processes = 1
threads = 2
vacuum = true

die-on-term = true

J'espère que ça aide.

0
Elia Ahadi

Parfois, cela peut être un problème d'autorité. Vérifiez l'autorité du répertoire du projet.

0
季亨达