aws ec2 和 Django ALLOWED_HOSTS

trn*_*snt 2 django amazon-ec2 amazon-web-services

我已经使用 Django 在 aws EC2 上使用 Elastic Beanstalk 建立了我的网站。我已按照 Django 网站上的建议将 ALLOWED_HOSTS 设置为 ['www.mydomain.fr', '.mydomain.fr']。

但是我收到了很多警报,例如:

无效的 HTTP_HOST 标头:'ip-xxx-xx-xx-xxx.eu-west-1.compute.internal'。您可能需要将 u'ip-xxx-xx-xx-xxx.eu-west-1.compute.internal' 添加到 ALLOWED_HOSTS。

ip-xxx-xx-xx-xxx.eu-west-1.compute.internal 在哪里是我的私有 DNS?

将它添加到 ALLOWED_HOSTS 是否安全,还是会导致安全漏洞?

非常感谢

Sea*_*ean 5

是的,没关系。但是如果您终止该实例,您将丢失该地址。所以:你应该努力寻找一种更灵活/动态的方式来解决 ALLOWED_HOSTS。您可能想尝试将实例的地址设置为环境变量。

或者,一个不太动态的解决方案:您可能还想检查使用 AWS 弹性 IP。虽然,这在 Virtual Private Cloud 中的私有子网中可能是不可能的——尽管在您的设置中听起来并非如此。

这是探索的另一种选择……尽管您必须对这是否安全进行一些研究。在此 AWS 页面查看如何从 AWS IP 获取实例的元数据...

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

然后在你的 Django 设置文件中利用上面建议的 AWS 资源,就像这样......

# DJANGO 制作设置

进口请求
从 .base 导入 *

########## ALLOWED_HOSTS
从 requests.exceptions 导入 ConnectionError

url = "http://169.254.169.254/latest/meta-data/public-ipv4"
尝试:
    r = requests.get(url)
    instance_ip = r.text
    ALLOWED_HOSTS += [instance_ip]
除了连接错误:
    error_msg = "您只能在 AWS EC2 实例上运行生产设置"
    引发不当配置(error_msg)
########## END ALLOWED_HOSTS