如何在弹性豆杆实例上设置django ALLOW_HOSTS以允许弹性负载均衡器IP?
背景
我在弹力豆杆上部署了django网站。网站域被添加到ALLOW_HOSTS,因此正常的请求被django正确地接受。
ALLOWED_HOSTS = ['.mydomain.com']弹性负载均衡器直接使用IP地址访问弹性豆杆实例进行健康检查,因此下一行允许进行健康检查:
# add elastic beanstalk instance local ip
aws_ip = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout=0.1).text
ALLOWED_HOSTS.append(aws_ip)但我仍然得到无效的主机IP错误,似乎弹性豆杆实例访问弹性负载平衡器,公共IP。有一些EC2部署的在线解决方案,因为您可以将HTTPD软件设置为在IP直接访问时设置http主机标头。但是我们不能在弹力豆杆上配置apache。那么如何将弹性负载平衡器IP添加到ALLOW_HOSTS中呢?
发布于 2016-10-07 17:21:06
我认为最好的方法是配置Apache来处理请求主机验证。即使使用豆茎,您也应该能够使用.ebextensions配置Apache。
总的想法是检查'ELB-HealthChecker/1.0' User-Agent的传入请求和您设置为请求的REQUEST_URI的健康检查URL。这些请求可以使用RequestHeader set Host命令将其主机头更改为允许的主机。
如果真的不想配置Apache,可以实现一个定制中间件来覆盖Django的CommonMiddleware,从而允许运行检查器请求绕过Django的ALLOWED_HOST验证。
如果您需要更多关于实现这些解决方案之一的信息,我将在this answer中详细介绍。
发布于 2017-03-01 15:36:59
没有充分的理由接受流量是针对您的ELB的IP。对于健康检查,我最喜欢的方法是:
import requests
try:
internal_ip = requests.get('http://instance-data/latest/meta-data/local-ipv4').text
except requests.exceptions.ConnectionError:
pass
else:
ALLOWED_HOSTS.append(internal_ip)
del requests发布于 2021-02-02 20:14:04
将EC2实例的本地IP添加到允许的主机中为我工作。
settings.py
import socket
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
ALLOWED_HOSTS = ['...', local_ip]https://stackoverflow.com/questions/34428877
复制相似问题