2014-01-28 10 views
24

Ich habe dieses Tutorial verfolgt: http://blog.wercker.com/2013/11/25/django-16-part3.html und ich versuche nur, es lokal mit Vagrant für jetzt arbeiten zu lassen. Ich versuche nicht, Wercker zu benutzen.Falsche Anfrage 400: nginx/gunicorn

Nachdem alles installiert ist, versuche ich auf die Website zuzugreifen, aber ich bekomme eine Bad Request (400) Fehler jedes Mal. Ich weiß nicht, ob das auf ein Problem in Nginx oder in Gunicorn zurückzuführen ist.

Sie haben beide einen Protokolleintrag, also weiß ich zumindest, dass die Anfrage den ganzen Weg durch Gunicorn geht und nicht auf der Nginx-Ebene gestoppt wird.

Wo liegt das Problem? Gunicorn? nginx?

Hier sind die Protokolle von Gunicorn und Nginx.

Ich sehe, dass das Favicon fehlt, aber das sollte nicht nur die Seite nicht angezeigt werden, richtig?

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" 
+14

Haben Sie eingestellt ALLOWED_HOSTS in deiner settings.py? https://docs.djangoproject.com/de/dev/ref/settings/#allowed-hosts –

+0

Hum ich denke, ich habe ja. Ich führe das Playbook mit diesem Befehl aus: '' ansible-playbook site.yml --extra-vars "source_location = $ REMOTE_SOURCE_DIR hostname = $ HOSTNAME" -u root'' wobei $ HOSTNAME' '' 127.0.0.1' ist '. Dann wird auf dem Skript aus dem Tuto die Variable gesetzt dank 'export DJANGO_ALLOWED_HOST = {{hostname}}' 'und' 'ALLOWED_HOSTS = [os.environ.get ('DJANGO_ALLOWED_HOST', '127.0.0.1'),] '' – Michael

+1

ok du warst richtig es war die '' DJANGO_ALLOWED_HOST'' Variable. Ich habe '' ALLOWED_HOSTS = ['*'] '' in der Einstellungsdatei gesetzt und es hat funktioniert. Aber ich verstehe nicht, welchen Wert ich setzen sollte, wenn ich einen lokalen Landstreicher benutze ...? '127.0.0.1'' funktioniert nicht ... Vielen Dank. – Michael

Antwort

49

hatte ich das gleiche Problem und das Hinzufügen von ALLOWED_HOSTS = ("yourdomain.com",) zu Einstellungen fixiert es.

UPDATE: Es gibt nur wenige andere Möglichkeiten:

  1. Nginx (oder was auch immer Webserver verwenden Sie) nicht passieren die $ Hostvariable für die App
  2. -Host unterstreicht enthält

See Details: https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-django/

+1

oder ALLOWED_HOSTS = ("*",) und starten Apache (Service Apache2 Neustart) –

+1

@HalilKaskavalci: Beachten Sie, dass die Frage gunicorn/nginx, nicht Apache2 angibt. Persönlich würde ich empfehlen, ALLOWED_HOSTS = ("*",) zu vermeiden. –

+0

Oh, mein Schlechter. Ich hatte das nicht bemerkt. Danke für die Korrektur. –

5

Da ich hatte das gleiche Problem (400 Fehlercode beim Versuch, mit vagrant Anteil teilen), ich stu mbel über diese Frage. Die Antwort und die Kommentare sind richtig, da die offensichtliche Lösung ist, ALLOWED_HOSTS Liste zu setzen, aber ich habe es bereits richtig eingestellt (ich dachte).

Ich kann nicht für nginx sprechen, wie ich dies auf apache2 laufen bin, aber hier ist es, was das Problem gelöst:

  1. Werfen Sie einen Blick auf die ALLOWED_HOSTS doc zu finden, was für Ihren Fall am besten ist.

  2. Mit Vagabund, könnten Sie finden es nützlich, die alle vagrantshare.com Sub-Domain zu übernehmen, so fügen Sie einfach '.vagrantshare.com' (den Punkt bemerken) an die ALLOWED_HOSTS Liste.

  3. Nicht sicher, ob es wirklich notwendig ist, aber ich änderte das geänderte Datum der wsgi.py Datei

    touch wsgi.py 
    
  4. Wie ich apache2 bin mit, musste ich den Dienst neu zu starten.

    sudo service apache2 restart 
    

Und dann hat es funktioniert.

-2

In Django 1.8.7 hatte ich eigentlich zwei Dinge zu tun, um das Problem zu lösen:

  • Zuerst meine Domain allowed_hosts Liste in settings.py als ALLOWED_HOSTS = ["mydomain.com",]
  • Zweitens, am Ende hinzufügen nur der settings.py Modul ALLOWED_HOSTS = ip_addresses() in ALLOWED_HOSTS += ip_addresses() (beachten Sie die Zeichen +) ändern

das ist mein Problem gelöst

Verwandte Themen