nginx et uWSGI donnent “504 Gateway timeout”

Je suis le tutoriel Configurer Django et votre serveur Web avec uWSGI et nginx .

UWSGI est opérationnel

J’ai configuré uwsgi pour servir mon projet Django avec la ligne suivante.

mydjangoproj $ uwsgi --http 0.0.0.0:8002 --module wsgi --harakiri 5 

Cela fonctionne quand je vais là-bas dans un navigateur, à 42.42.42.42:8002 .

Ma configuration nginx

nginx s’exécute en tant que démon, et la visite du site par défaut, le port 80, fonctionne.

J’ai ajouté ceci en tant que site à nginx en utilisant le fichier mydjangoproj_nginx.conf suivant:

 server { listen 8000; server_name 42.42.42.42; charset utf-8; client_max_body_size 75M; location /static { alias /home/myuser/mydjangoproj/static; } location / { uwsgi_pass 127.0.0.1:8002; include /home/myuser/mydjangoproj/uwsgi_params; } } 

J’utilise la version non modifiée de uwsgi_params , du tutoriel:

 uwsgi_param QUERY_STRING $query_ssortingng; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name; 

Il sert parfaitement les fichiers statiques.

Erreur

Si je visite le site 42.42.42.42:8000, il se bloque pendant longtemps, jusqu’à la fin du délai nginx, et j’attends le délai d’expiration de la 504 Gateway Time-out .

uWSGI n’écrit rien dans le shell. Si vous visitez directement dans le navigateur, il s’agit de recevoir une demande.

Le journal des erreurs nginx écrit uniquement après l’expiration du délai d’attente:

 2014/12/11 05:31:12 [error] 28895#0: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 66.66.66.66, server: 42.42.42.42, request: "GET / HTTP/1.1", upstream: "uwsgi://42.42.42.42:8002", host: "42.42.42.42:8000" 

Si je ferme le uWSGI, qui est juste lancé depuis un shell, je reçois immédiatement un 502 Bad Gateway .

Lorsque vous effectuez une recherche en ligne, les gens recommandent simplement de définir le délai d’expiration de uWSGI inférieur au délai d’expiration nginx, c’est pourquoi je lance uWSGI avec --harakiri 5 .

Alors, quel est mon problème ici?

Je pense que vous exécutez uwsgi en mode http – http --http 0.0.0.0:8002 mais vous avez configuré nginx comme proxy wsgi changer votre script uwsgi en:

  uwsgi --socket :8002 --module wsgi --harakiri 5 

Notez que si vous utilisez nginx et uwsgi sur la même machine, il est préférable d’utiliser des sockets unix