避免使用 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.1localhost,在 [生产设置中添加 mysite.com。因此,无论何时在生产环境中运行应用程序,都需要调用 production_settings.py,而在开发环境中,您可以使用 dev_settings.py。这是您要找的吗? @ReemaParakh 不——我已经有了类似if PRODUCTION_STATUS == 'LOCAL' then ALLOWED_HOSTS = [*]的设置 在这种情况下,要在本地运行,您需要在设置文件中设置localhost127.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

授权凭证剥离 --- django, elastic beanstalk, oauth

在 Amazon Elastic Beanstalk 上使用 Docker 部署 Django