2014-01-28 63 views
24

我按照这个教程:http://blog.wercker.com/2013/11/25/django-16-part3.html,我只是想使它现在在本地与流浪汉工作。我不想使用韦克尔。不良要求400:nginx/gunicorn

安装完成后,我尝试访问网站,但每次都收到错误的请求(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" 
+14

你设置您的settings.py中的ALLOWED_HOSTS? https://docs.djangoproject.com/zh/dev/ref/settings/#allowed-hosts –

+0

嗡嗡声我想我是的。我用这个命令运行剧本:''ansible-playbook site.yml --extra-vars“source_location = $ REMOTE_SOURCE_DIR hostname = $ HOSTNAME”-u root''其中''HOSTNAME''为''127.0.0.1' '。然后在tuto的脚本中,通过'export DJANGO_ALLOWED_HOST = {{hostname}}''和''ALLOWED_HOSTS = [os.environ.get('DJANGO_ALLOWED_HOST','127.0.0.1')]设置变量。 '' – Michael

+1

好吧,你是对的,它是''DJANGO_ALLOWED_HOST''变量。 我在设置文件中设置了''ALLOWED_HOSTS = ['*']'',它工作正常。 但是我不明白在使用当地流浪汉的时候应该放置什么样的价值......? ''127.0.0.1''不起作用... 非常感谢。 – Michael

回答

49

我有同样的问题,并增加ALLOWED_HOSTS = ("yourdomain.com",)来设置固定它。

UPDATE:还有一些其他的可能性:

  1. Nginx的(或任何Web服务器使用)的$主机变量不传递给应用
  2. 主机包含突出

见详细信息:https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-django/

+1

或ALLOWED_HOSTS =(“*”,)并启动apache(服务apache2重启) –

+1

@HalilKaskavalci:请注意,该问题指定gunicorn/nginx,而不是Apache2。就个人而言,我会建议避免使用ALLOWED_HOSTS =(“*”,)。 –

+0

哦,我的坏。我没有注意到那个。感谢您的纠正。 –

5

由于我遇到了同样的问题(当试图与流浪股份共享时出现400错误代码),我stu在这个问题上。答案和评论是正确的,因为明显的解决方案是设置ALLOWED_HOSTS列表,但我已经正确设置了它(我认为)。

为我跑这对我的Apache2不能nginx的说话,但这里是解决该问题:

  1. 看看在ALLOWED_HOSTS doc找到什么是最适合你的情况。

  2. 随着流浪者,你可能会发现它有用接受所有vagrantshare.com子域,所以只需添加'.vagrantshare.com'(注意点)到ALLOWED_HOSTS列表。

  3. 不知道是否真的是必要的,但我由于我使用的Apache2改变wsgi.py文件

    touch wsgi.py 
    
  4. 的修改日期,我需要重新启动该服务。

    sudo service apache2 restart 
    

然后它的工作。

-2

在Django的1.8.7,我不得不这样做实际上是两件事情来解决这个问题:

  • 首先,添加我的域名在settings.py以ALLOWED_HOSTS列表为ALLOWED_HOSTS = ["mydomain.com",]
  • 其次,到底在settings.py模块的只是改变ALLOWED_HOSTS = ip_addresses()ALLOWED_HOSTS += ip_addresses()(注意+号)

这解决了我的问题