我总是在Django的环境变量中设置我的ALLOWED_HOSTS
。在开发.env
时,我总是设置ALLOWED_HOSTS=.localhost,.127.0.0.1
,而在生产环境中设置ALLOWED_HOSTS=mydomain.dom,my_ip_address
现在我正在熟悉Docker,问题是ALLOWED_HOSTS
在生产中的价值是什么。它是否应该保持为localhost,因为我知道localhost将引用主机容器,或者我应该将其设置为我的域。我使用Nginx作为反向代理来转发请求。
4条答案
按热度按时间mbskvtky1#
您应该将其设置为您的域。
ALLOWED_HOSTS
用于确定请求是否来自正确的域名。如果查看ALLOWED_HOSTS的文档,您将看到它与请求的
Host
头进行比较,该头由访问您站点的用户的User代理设置。因此,尽管Docker容器是为自己的本地主机服务的,但请求是从
example.com
发出的请查看文档的这一部分,了解为什么主机头验证是必要的,您可能会更好地理解
ALLOWED_HOSTS
的用途。hrysbysz2#
您可以使用您的常规域/IP地址。ALLOWED_HOSTS与匹配服务器IP的用户头有关。服务器上的内部机制不是它所关心的。
ALLOWED_HOSTS=mydomain.dom,my_ip_address
你就该这么说。
j1dl9f463#
谢谢你的回答,我证实了这是真的。我想补充的是,我还记得这可以通过将您的域添加到
/etc/hosts
指向127.0.0.1
来确认。如果该域未包含在/etc/hosts
中,Django将抛出一个调试错误,告诉您该域未添加到ALLOWED_HOSTS
中insrf1ej4#
在使用Docker时,当您使用Nginx或Apache等WebServer时,为该服务器(Nginx,Apache,...)设置配置时,您应该为服务器选择一个名称,如下所示,例如在nginx.conf中>
这个配置文件会将localhostMap到你的docker机器的IP地址,你可以在你的docker容器中运行这个命令来确认
在输出中,您应该会看到类似这样的内容>
其中127.21.0.2是容器的IP地址,这对您来说可能有所不同
现在在Django项目中,更改settings.py如下>
这样你就可以动态设置ALLOWED_HOSTS,docker contaier ip的变化将由container host resolver管理。
注意,将ALLOWED_HOSTS设置为 * 并不是一个好主意:)
此方法也适用于uwsgi、gunicorn和任何其他wsgi