web-dev-qa-db-fra.com

Mauvaise demande 400: nginx / gunicorn

J'ai suivi ce tutoriel: http://blog.wercker.com/2013/11/25/Django-16-part3.html et j'essaie juste de le faire fonctionner localement avec Vagrant pour l'instant . Je n'essaie pas d'utiliser Wercker.

Une fois que tout est installé, j'essaie d'accéder au site Web mais j'obtiens à chaque fois une erreur Bad Request (400) . Je ne sais pas si cela est dû à un problème en nginx ou en gunicorn.

Ils ont tous les deux une entrée de journal, donc au moins je sais que la demande va jusqu'au bout de gunicorn et n'est pas arrêtée au niveau nginx.

Où se situe le problème? Gunicorn? nginx?

Voici les journaux de gunicorn et nginx.

Je vois que le favicon est manquant mais cela ne devrait pas empêcher la page de s'afficher à droite?

Gunicorn:

 >>> cat /var/local/sites/hellocities/run/gunicorn.error.log
10.0.0.1 - - [28/Jan/2014:07:05:16] "GET / HTTP/1.0" 400 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36"
10.0.0.1 - - [28/Jan/2014:07:09:43] "GET / HTTP/1.0" 400 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36"

Nginx:

>>> cat /var/log/nginx/hellocities-access.log
10.0.0.1 - - [28/Jan/2014:07:05:16 +0000] "GET / HTTP/1.1" 400 37 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36"
10.0.0.1 - - [28/Jan/2014:07:05:20 +0000] "GET /favicon.ico HTTP/1.1" 404 200 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36"
10.0.0.1 - - [28/Jan/2014:07:09:43 +0000] "GET / HTTP/1.1" 400 37 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36"
10.0.0.1 - - [28/Jan/2014:07:09:44 +0000] "GET /favicon.ico HTTP/1.1" 404 200 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36"

>>> cat /var/log/nginx/hellocities-error.log
2014/01/28 07:05:20 [error] 13886#0: *1 open() "/var/local/sites/hellocities/static/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", Host: "10.0.0.200"
2014/01/28 07:09:44 [error] 13886#0: *3 open() "/var/local/sites/hellocities/static/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", Host: "10.0.0.200"
32
Michael

J'ai eu le même problème et l'ajout de ALLOWED_HOSTS = ("yourdomain.com",) aux paramètres l'a corrigé.

MISE À JOUR: il y a quelques autres possibilités:

  1. Nginx (ou le serveur Web que vous utilisez) ne transmet pas la variable $ Host à l'application
  2. L'hôte contient des traits de soulignement

Voir les détails: https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-Django/

65
Andrey Zarubin

Comme je rencontrais le même problème (code d'erreur 400 en essayant de partager avec le partage vagabond), je tombe sur cette question. La réponse et les commentaires sont corrects, car la solution évidente consiste à définir ALLOWED_HOSTS liste, mais je le définissais déjà correctement (je pensais).

Je ne peux pas parler pour nginx car j'exécute ceci sur Apache2, mais voici ce qui a résolu le problème:

  1. Jetez un oeil à la ALLOWED_HOSTS doc pour trouver ce qui convient le mieux à votre cas.

  2. Avec vagrant, il peut être utile d'accepter tous les sous-domaines vagrantshare.com , il suffit donc d'ajouter '.vagrantshare.com' (remarquez le point) au ALLOWED_HOSTS liste.

  3. Je ne sais pas si c'est vraiment nécessaire, mais j'ai changé la date modifiée du wsgi.py fichier

    touch wsgi.py
    
  4. Comme j'utilise Apache2, j'ai dû redémarrer le service.

    Sudo service Apache2 restart
    

Et puis ça a marché.

6
Emile Bergeron