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)
为什么会这样?
答案 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)
运行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 = ['*']