错误请求400:nginx/gunicorn

Mic*_*ael 33 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"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

And*_*bin 66

我有同样的问题,并添加ALLOWED_HOSTS = ("yourdomain.com",)到设置修复它.

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

  1. Nginx(或您使用的任何Web服务器)不会将$ host变量传递给应用程序
  2. 主机包含下划线

详情请见:https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-django/

  • @HalilKaskavalci:请注意,问题是指定gunicorn/nginx,而不是Apache2.就个人而言,我建议避免使用ALLOWED_HOSTS =("*",). (3认同)

Emi*_*ron 6

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

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

  1. 查看ALLOWED_HOSTS文档,找出最适合您案例的文档.

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

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

    touch wsgi.py
    
    Run Code Online (Sandbox Code Playgroud)
  4. 当我使用apache2时,我需要重启服务.

    sudo service apache2 restart
    
    Run Code Online (Sandbox Code Playgroud)

然后它奏效了.