首页 > 解决方案 > Django 无效的 HTTP_HOST 标头 Elastic Beanstalk

问题描述

我在 AWS ELB 上运行一个大型爱好网站。我试图通过搜索 StackOverflow 来解决这个问题,但没有任何效果。我更新了我的 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 地址。

还有其他想法或想法吗?

标签: djangoamazon-elastic-beanstalk

解决方案


这似乎是一个 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 上发出请求。


推荐阅读