web-dev-qa-db-ja.com

悪いリクエスト400:nginx / gunicorn

私はこのチュートリアルに従っています: http://blog.wercker.com/2013/11/25/Django-16-part3.html そして今のところVagrantでローカルで動作するようにしています。 Werckerを使用しようとはしていません。

すべてをインストールした後、Webサイトにアクセスしようとしましたが、毎回Bad Request(400)エラーが表示されます。それがnginxまたはgunicornの問題によるものかどうかはわかりません。

どちらにもログエントリがあるため、少なくともリクエストはgunicornを経由し、nginxレベルで停止されないことがわかります。

問題はどこにありますか? Gunicorn? nginx?

ここに、gunicornとnginxのログがあります。

ファビコンが欠落しているように見えますが、ページが正しく表示されるのを止めることはできませんか?

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

同じ問題が発生し、ALLOWED_HOSTS = ("yourdomain.com",)を設定に追加すると修正されました。

更新:他のいくつかの可能性があります:

  1. Nginx(または使用するWebサーバー)は、$ Host変数をアプリに渡しません
  2. ホストにアンダースコアが含まれています

詳細を参照してください: https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-Django/

65
Andrey Zarubin

同じ問題(Vagrant共有と共有しようとすると400エラーコード)が発生したため、この質問に出くわしました。明らかな解決策はALLOWED_HOSTSリストを設定することですので、答えとコメントは正しいですが、すでに正しく設定していました(私は考えていました)。

Apache2でこれを実行しているため、nginxについて話すことはできませんが、問題を解決したのは次のとおりです。

  1. ALLOWED_HOSTS doc を見て、あなたのケースに最適なものを見つけてください。

  2. Vagrantでは、すべてのvagrantshare.comサブドメインを受け入れると便利な場合があるため、'.vagrantshare.com'(ドットに注意)を追加するだけですALLOWED_HOSTSリスト。

  3. 本当に必要かどうかはわかりませんが、wsgi.pyファイルの変更日を変更しました

    touch wsgi.py
    
  4. Apache2を使用しているため、サービスを再起動する必要がありました。

    Sudo service Apache2 restart
    

そして、それはうまくいきました。

6
Emile Bergeron