【问题标题】:Bad request 400: nginx / gunicorn错误请求 400:nginx / gunicorn
【发布时间】:2014-02-19 09:06:17
【问题描述】:

我已遵循本教程:http://blog.wercker.com/2013/11/25/django-16-part3.html,我现在只是想让它在本地与 Vagrant 一起工作。我不想使用 Wercker。

安装完所有内容后,我尝试访问该网站,但每次都收到 Bad Request (400) 错误。不知道是 nginx 还是 gunicorn 的问题。

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

问题出在哪里?独角兽? nginx?

这里是gunicorn和nginx的日志。

我看到图标丢失了,但这不应该阻止页面显示对吗?

独角兽:

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

【问题讨论】:

  • 您是否在 settings.py 中设置了 ALLOWED_HOSTS? docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
  • 嗯,我想我做到了。我使用以下命令运行剧本:ansible-playbook site.yml --extra-vars "source_location=$REMOTE_SOURCE_DIR hostname=$HOSTNAME" -u root 其中$HOSTNAME127.0.0.1。然后在来自 tuto 的脚本上,通过 export DJANGO_ALLOWED_HOST={{hostname}}ALLOWED_HOSTS = [os.environ.get('DJANGO_ALLOWED_HOST', '127.0.0.1'),] 设置变量
  • 好吧,你是对的,它是 DJANGO_ALLOWED_HOST 变量。我在设置文件中设置了ALLOWED_HOSTS = ['*'],它起作用了。但是我不明白在使用本地流浪者时应该赋予什么价值......? 127.0.0.1 不起作用...非常感谢。
  • 域名中的下划线也会触发这个错误。不适用于 Django 1.3 和 1.4,但至少适用于 1.6.1。请参阅 code.djangoproject.com/ticket/20264 为什么这种行为是正确的。

标签: django nginx gunicorn


【解决方案1】:

我遇到了同样的问题,将ALLOWED_HOSTS = ("yourdomain.com",) 添加到设置中修复了它。

更新:几乎没有其他可能性:

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

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

【讨论】:

  • 或 ALLOWED_HOSTS = ("*",) 并启动 apache(服务 apache2 重启)
  • @HalilKaskavalci :请注意,问题指定 gunicorn/nginx,而不是 Apache2。就个人而言,我建议避免使用 ALLOWED_HOSTS=("*",)。
  • 哦,我的错。我没有注意到那个。谢谢指正。
  • 这解决了我的问题。我收到了 BAD REQUEST 400。谢谢@Andrey Zarubin
  • 还要检查可能导致错误的尾随空格
【解决方案2】:

由于我遇到了同样的问题(尝试与 vagrant share 共享时出现 400 错误代码),我偶然发现了这个问题。答案和 cmets 是正确的,因为显而易见的解决方案是设置 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
    

然后它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多