首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹性负载均衡器后弹性豆杆实例的Django ALLOWED_HOST设置

弹性负载均衡器后弹性豆杆实例的Django ALLOWED_HOST设置
EN

Stack Overflow用户
提问于 2015-12-23 04:54:22
回答 5查看 7.1K关注 0票数 8

如何在弹性豆杆实例上设置django ALLOW_HOSTS以允许弹性负载均衡器IP?

背景

我在弹力豆杆上部署了django网站。网站域被添加到ALLOW_HOSTS,因此正常的请求被django正确地接受。

代码语言:javascript
运行
复制
ALLOWED_HOSTS = ['.mydomain.com']

弹性负载均衡器直接使用IP地址访问弹性豆杆实例进行健康检查,因此下一行允许进行健康检查:

代码语言:javascript
运行
复制
# 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中呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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中详细介绍。

票数 4
EN

Stack Overflow用户

发布于 2017-03-01 15:36:59

没有充分的理由接受流量是针对您的ELB的IP。对于健康检查,我最喜欢的方法是:

代码语言:javascript
运行
复制
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
  • 没有复杂的apache配置,这取决于您的域
  • 在dns上快速失败,不需要依赖超时。
票数 20
EN

Stack Overflow用户

发布于 2021-02-02 20:14:04

将EC2实例的本地IP添加到允许的主机中为我工作。

settings.py

代码语言:javascript
运行
复制
import socket

hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)

ALLOWED_HOSTS = ['...', local_ip]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34428877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档