Why is Django throwing error "DisallowedHost at /"?

时间:2016-11-18 00:34:03

标签: python django django-settings

I am setting up my own Django server using this Digital Ocean tutorial中的废文字。我在每个步骤后创建了Django框架,并使用以下命令运行服务器:

./manage.py runserver 0.0.0.0:8000

当我尝试在端口8000访问IP时,显示以下错误:

DisallowedHost at /
Invalid HTTP_HOST header: 'XXX.XXX.XXX.XXX:8000'. You may need to add u'XXX.XXX.XXX.XXX' to ALLOWED_HOSTS.

(用X代替的IP)

为什么会这样?

6 个答案:

答案 0 :(得分:62)

settings.py中,有一个名为ALLOWED_HOSTS的列表。您需要将错误中显示的IP地址添加到该列表中:

ALLOWED_HOSTS = ['XX.XX.XX.XX']

不应添加端口。

说明:

Django检查HTTP请求的Host标头,以获取允许主机内的url / ip地址。

来自django网站:

  

这是一种防止HTTP Host头攻击的安全措施,即使在许多看似安全的Web服务器配置下也是如此。

https://docs.djangoproject.com/en/1.10/ref/settings/#allowed-hosts

答案 1 :(得分:8)

对于开发,您可以使用*通配符来允许settings.py中的所有主机:

ALLOWED_HOSTS = ['*']

重要

在生产环境中部署应用程序时修改此配置。

答案 2 :(得分:1)

有时将其添加到主机中是不够的,因为一次又一次受挫地尝试。有时会卡在缓存中,即使您做对了一切,也会遇到相同的错误。在那种情况下,对我有用的是更改端口,从 8081 和缓存问题结束。

我是这样运行的:

python3 manage.py runserver 127.0.0.1:8081

答案 3 :(得分:0)

同时包含两者(“ www.name.com”,“ ip.ip.ip.ip”) 设置Debug = True,然后重试IP和URL地址。

转到“追溯”部分,找到消息[提高DisallowedHost(msg)] 点击->▼本地变量

它将显示传入的域名和允许的主机的设置:

*Variable       Value
*allowed_hosts  ['ip.ip.ip.ip', 'name.com']
*domain          'something.com'
*

将输入值复制到您的settings.py中。如果看到旧设置,请重新启动服务器\ nginx

答案 4 :(得分:0)

对于在本地主机上运行Django项目并由“ ngrok”免费托管

运行ngrok http 8000

(在您的项目中运行此项目之前,请确保您的项目需要在本地主机上运行,​​例如python manage.py runserver)

http://563ae936.ngrok.io-> http://localhost:8000

编辑Setting.py

ALLOWED_HOSTS = ['563ae936.ngrok.io','localhost','127.0.0.1','testserver']

在这里“ 563ae936.ngrok.io”用删除 http:// https://

替换您的主机名

答案 5 :(得分:-1)

转到setting.py

ALLOWED_HOSTS = ['*']