我们最近更改了部署策略以使用 AWS Auto Scaling 组。
我们在生产中遇到的一个问题是新创建的 EC2。
我们的应用程序开始返回:
Invalid HTTP_HOST header:
<ip_address>. You may need to add <ip_address> to ALLOWED_HOSTS`
因为这些EC2并不在原来的Django中ALLOWED_HOSTS
.
每个新创建的 EC2 都必须重新部署是没有意义的;这与“自动缩放”的含义相矛盾。
此外,出于安全原因,我们不想使用通配符或 IP 范围。
我们可以做什么?
接受的答案在 IMDSv1 上运行良好。 2019 年,AWS 推出了需要会话令牌身份验证的 IMDSv2。因此,在请求实例元数据之前,我们首先需要获取令牌:
import requests
try:
IMDSv2_TOKEN = requests.put('http://169.254.169.254/latest/api/token', headers={
'X-aws-ec2-metadata-token-ttl-seconds': '3600'
}).text
EC2_PRIVATE_IP = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout=0.01, headers={
'X-aws-ec2-metadata-token': IMDSv2_TOKEN
}).text
except requests.exceptions.RequestException:
EC2_PRIVATE_IP = None
ALLOWED_HOSTS = [
'my-app-test.eu-central-1.elasticbeanstalk.com'
]
if EC2_PRIVATE_IP:
ALLOWED_HOSTS.append(EC2_PRIVATE_IP)
参考:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)