Django 无效的 HTTP_HOST 标头 Elastic Beanstalk

Posted

技术标签:

【中文标题】Django 无效的 HTTP_HOST 标头 Elastic Beanstalk【英文标题】:Django Invalid HTTP_HOST header Elastic Beanstalk 【发布时间】:2019-09-29 02:32:16 【问题描述】:

我正在 AWS ELB 上运行一个大型业余爱好网站。我试图通过搜索 *** 来解决这个问题,但没有任何效果。我更新了我的 settings.py 和 ALLOWED_HOSTS 如下:

ALLOWED_HOSTS = ['127.0.0.1','.amazonaws.com','mysite.com','.elasticbeanstalk.com','localhost',]

import requests
EC2_PRIVATE_IP = None
try:
  EC2_PRIVATE_IP = requests.get("http://169.254.169.254/latest/meta-data/local-ipv4", timeout = 0.50).text
except requests.exceptions.RequestException:
  pass

if EC2_PRIVATE_IP:
  ALLOWED_HOSTS.append(EC2_PRIVATE_IP)

ELB 健康检查确实有效。

但是,我每天仍会收到数千封错误电子邮件。例如:

HTTP_HOST 标头无效:“54.84.163.167”。您可能需要将“54.84.163.167”添加到 ALLOWED_HOSTS。

报告于 / 无效的 HTTP_HOST 标头:“54.84.163.167”。您可能需要将“54.84.163.167”添加到 ALLOWED_HOSTS。

我的站点架构是 Cloudfront、ELB 和 Django。据我所知,显示的 IP 地址(它确实会定期更改)是亚马逊网络的一部分。我怀疑它是负载均衡器本身,但我不知道如何确认并确定要添加到允许主机的负载均衡器 IP 地址。

还有其他想法或想法吗?

【问题讨论】:

我也看到了这个确切的问题。我不确定这只是随机机器人爬行还是配置错误。话虽这么说,即使它是爬虫程序,让它返回一个不同的错误状态然后 500 会很好,因为这会导致我的运行状况检查或多或少地返回错误/阳性。 您找到解决方案了吗?我仍然有这个问题。 【参考方案1】:

这似乎是一个 AWS IP 地址,可能来自 EC2 或 ELB。 挖 -x 54.84.163.167 +short ec2-54-84-163-167.compute-1.amazonaws.com.

这不是云端区域边缘 ip,因为它未在此处列出: http://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips (CLOUDFRONT_REGIONAL_EDGE_IP_LIST)

另外,从 ELB 到 Ec2 的运行状况检查发生在 ELB ENI 私有 IP 地址中,我不确定哪个 AWS 资源拥有它,但它似乎是绕过 CloudFront 直接在 ELB 上发出请求。

【讨论】:

以上是关于Django 无效的 HTTP_HOST 标头 Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:'localhost'”消息

Django 错误:无效的 HTTP_HOST 标头:u'/run/myprojectname/gunicorn.sock:'

Django 无效的 HTTP_HOST 标头 Elastic Beanstalk

无效的http_host标头

Django 无效的 HTTP_HOST 标头:'testserver'。您可能需要将 u'testserver' 添加到 ALLOWED_HOSTS

将 django 站点从 http 升级到 https 后,我不断收到“无效的 HTTP_HOST 标头”错误电子邮件