避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:'localhost'”消息
Posted
技术标签:
【中文标题】避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:\'localhost\'”消息【英文标题】:Avoiding getting "Invalid HTTP_HOST header: 'localhost'" message with Django + Elastic Beanstalk避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:'localhost'”消息 【发布时间】:2019-07-09 06:01:30 【问题描述】:我在 Elastic Beanstalk 上设置了 Django 应用程序。工作和运行都很棒。
我的设置文件只包含所需的允许主机 --
ALLOWED_HOSTS = ['mysite.com']
我收到发送到我的电子邮件的 Django 错误——这通常是我喜欢的。但是,每次我重新部署我的应用程序(我是通过上传 ZIP 文件夹而不是通过 CLI 来完成的)时,我都会收到此消息
Invalid HTTP_HOST header: 'localhost'. You may need to add 'localhost' to ALLOWED_HOSTS.
我在运行我的网站时没有遇到任何问题,我只是不喜欢收到此错误。我想我可以添加 localhost(或者可能是 127.0.0.1)作为允许的主机——但是出于安全原因,我不确定这是否是一个好主意。
这里可能会发生什么,我该如何解决?添加这些主机可以吗?
编辑:
澄清一下,当我将代码部署到 Elastic Beanstalk 时会发生这种情况,而不是在本地运行它时。
【问题讨论】:
您可以创建两个设置文件。一种用于生产,一种用于开发。在开发文件中,您可以在 ALLOWED_HOST 中添加127.0.0.1
或 localhost
,在 [生产设置中添加 mysite.com
。因此,无论何时在生产环境中运行应用程序,都需要调用 production_settings.py,而在开发环境中,您可以使用 dev_settings.py。这是您要找的吗?
@ReemaParakh 不——我已经有了类似if PRODUCTION_STATUS == 'LOCAL' then ALLOWED_HOSTS = [*]
的设置
在这种情况下,要在本地运行,您需要在设置文件中设置localhost
或127.0.0.1
。
【参考方案1】:
您已经在ALLOWED_HOSTS
中提供了您的域,但是当您在本地运行项目时,它仍然需要来自您的mysite.com
的请求。所以你需要把localhost
也加给你ALLOWED_HOSTS
:
Settings.py
ALLOWED_HOSTS = [
'mysite.com',
'localhost:8000', #<-- add this
'127.0.0.1:8000' #<-- add these just in case
]
【讨论】:
感谢您的回答——不过我不是在谈论在本地运行项目。 @bones225,你解决了这个问题吗?我目前有同样的问题。 @NeilAggarwal 我没有。我猜将localhost
放在产品ALLOWED_HOSTS
中会解决这个问题,但是我对这样做的安全影响知之甚少,因此我觉得这样做很舒服。每次部署时我都会发现一封错误电子邮件......我还有其他鱼要炒 xD以上是关于避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:'localhost'”消息的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django-elasticsearch-dsl 将 django-modeltranslation 创建的列索引为 Elastic?
AWS Elastic Beanstalk 上禁止使用 Django 403
使用 Elastic BeanStalk + Django 设置 ElastiCache Redis
使用 Postgres 在 Elastic Beanstalk 上设置 Django