为什么 Django 抛出错误 "DisallowedHost at /"?

Why is Django throwing error "DisallowedHost at /"?

我正在使用这个 Digital Ocean tutorial 设置我自己的 Django 服务器。我在每个步骤之后创建了 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.

(IP 替换为 X)

为什么会这样?

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

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

注意添加IP地址,端口(例如, 127.0.0.1 而不是 127.0.0.1:8000)

解释:

Django 检查 HTTP 请求的 Host header 以查找允许主机内的 url/ip 地址。

来自 django 网站:

This is a security measure to prevent HTTP Host header attacks, which are possible even under many seemingly-safe web server configurations.

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

包括两者('www.name.com'、'ip.ip.ip.ip') 设置 Debug = True,然后重试 IP 和 URL 地址。

转到 Traceback 部分,找到消息 [ raise DisallowedHost(msg) ] 点击 -> ▼ 本地变量

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

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

将传入值复制到您的settings.py。如果您看到旧设置,请重新启动 server\nginx

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

ALLOWED_HOSTS = ['*']

重要

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

对于本地主机上的 运行 Django 项目,由 "ngrok"

免费托管

运行 ngrok http 8000

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

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://[= 替换您的主机名11=]

转到setting.py

ALLOWED_HOSTS = ['*']

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

我运行是这样的:

python3 manage.py runserver 127.0.0.1:8081