python - 如何将EC2 ip地址动态添加到Django ALLOWED_HOSTS

标签 python django amazon-web-services amazon-ec2

<分区>

我们最近更改了部署策略以使用 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 范围。

我们能做什么?

最佳答案

下面的代码片段将找到与您的 EC2 实例关联的公共(public) IP 地址或弹性 IP 地址,并将其附加到 ALLOWED_HOSTS。

  • 安装 PyCurl

    pip install pycurl
    
  • Python 3

    import pycurl
    from io import BytesIO
    
    # Determine Public IP address of EC2 instance
    buffer = BytesIO()
    c = pycurl.Curl()
    c.setopt(c.URL, 'checkip.amazonaws.com')
    c.setopt(c.WRITEDATA, buffer)
    c.perform()
    c.close()
    # Body is a byte string, encoded. Decode it first.
    ALLOWED_HOSTS.append(buffer.getvalue().decode('iso-8859-1').strip())
    
  • python 2

    import pycurl
    from StringIO import StringIO
    
    buffer = StringIO()
    c = pycurl.Curl()
    c.setopt(c.URL, 'checkip.amazonaws.com')
    c.setopt(c.WRITEDATA, buffer)
    c.perform()
    c.close()
    # In Python 2, we can cast the return value to
    # string without knowing the exact encoding.
    ALLOWED_HOSTS.append(str(buffer.getvalue()).strip())
    

关于python - 如何将EC2 ip地址动态添加到Django ALLOWED_HOSTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47277541/

相关文章:

python - 构造一个 df,使得范围内的每个数字在知道属于 'A' 的范围值的开始和结束时都获得分配的值 'A'

Python:结合日志记录和 wx,以便将日志流重定向到 stdout/stderr 框架

python - Scrapy - 如何启动同一个蜘蛛进程的多个实例?

python - 推荐使用 django 的扭曲网络

javascript - 在 django 项目中放置 Angular ng-templates 的位置

python-polars 通过分隔符将字符串列拆分为多列

python - Django 管理内联更改列表

amazon-web-services - 文件上传的最长 Amazon S3 复制时间是多少?

amazon-web-services - AWS Elasticsearch 集群磁盘空间在数据实例之间不平衡

node.js - 从 AWS Lambda 进行 API 调用结果不一致