【发布时间】:2016-06-14 01:19:31
【问题描述】:
我有一个 Django 网络应用程序。它在 Elastic Beanstalk 上的 Docker 内部运行。
我想指定一个health check URL 来进行比“ELB 能否建立 TCP 连接”更高级的健康检查。
完全合理的是,ELB 通过 HTTP 连接到实例,使用实例的主机名(例如 ec2-127-0-0-1.compute-1.amazonaws.com)作为 Host 标头来做到这一点。
Django 有ALLOWED_HOSTS 验证传入请求的Host 标头。我通过环境变量将其设置为我的应用程序的外部域。
不出所料且完全合理,Django 拒绝了 ELB URL 健康检查,因为缺少匹配的 Host。
我们不想禁用ALLOWED_HOSTS,因为我们希望能够信任get_host()。
目前的解决方案似乎是:
- 以某种方式说服 Django 不要关心
ALLOWED_HOSTS的某些特定路径(即健康检查 URL) - 做一些时髦的事情,比如在启动时调用 EC2 信息 API 来获取主机的 FQDN 并将其附加到
ALLOWED_HOSTS
这些似乎都不是特别令人愉快。谁能推荐一个更好/现有的解决方案?
(为免生疑问,我认为这个问题与“禁用ALLOWED_HOSTS,在主机上过滤的前端HTTPD”的情况相同 - 我希望健康检查命中Django ,而不是前端 HTTPD)
【问题讨论】:
-
@TheGeorgeous 很抱歉没有早点说清楚——这正是我所追求的;想将其发布为答案以便我接受吗? (希望你不介意,如果我在一个月内没有收到你的消息,我会这样做,这样任何登陆这里的人都会更清楚地看到它!)
标签: django amazon-web-services amazon-elastic-beanstalk