错误请求400:nginx / gunicorn

时间:2014-01-28 07:23:13

标签: django nginx gunicorn

我已经按照本教程进行了操作:http://blog.wercker.com/2013/11/25/django-16-part3.html我现在正试图让它在Vagrant本地工作。我不是想使用Wercker。

安装完所有内容后,我尝试访问该网站,但每次都出现错误请求(400)错误。我不知道这是由于nginx还是gunicorn中的问题。

他们都有一个日志条目,所以至少我知道请求一直通过gunicorn并且不会在nginx级别停止。

问题出在哪里? Gunicorn? nginx的?

以下是gunicorn和nginx的日志。

我看到favicon丢失但只是不应该阻止页面显示正确吗?

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"

2 个答案:

答案 0 :(得分:61)

我遇到了同样的问题,并在设置中添加了ALLOWED_HOSTS = ("yourdomain.com",)

更新:还有其他几种可能性:

  1. Nginx(或您使用的任何Web服务器)未将$ host变量传递给应用程序
  2. 主机包含下划线
  3. 查看详情:https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-django/

答案 1 :(得分:6)

由于我遇到了同样的问题(尝试与流浪汉分享时有400个错误代码),我偶然发现了这个问题。答案和评论是正确的,因为显而易见的解决方案是设置ALLOWED_HOSTS列表,但我已经正确设置(我想)。

我不能代表nginx因为我在apache2上运行它,但是这就解决了这个问题:

  1. 查看ALLOWED_HOSTS doc,找出最适合您案例的内容。

  2. 使用vagrant,您可能会发现接受所有 vagrantshare.com 子域很有用,所以只需将'.vagrantshare.com'(注意点)添加到ALLOWED_HOSTS列表

  3. 不确定是否真的有必要,但我更改了wsgi.py文件的修改日期

    touch wsgi.py
    
  4. 当我使用apache2时,我需要重启服务。

    sudo service apache2 restart
    
  5. 然后它奏效了。