AWS Elastic Beanstalk VPC - 从 ELB 到实例的 HTTPS
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk VPC - 从 ELB 到实例的 HTTPS【英文标题】:AWS Elastic Beanstalk VPC - HTTPS from ELB to instance 【发布时间】:2016-12-13 03:16:08 【问题描述】:我正在尝试找出为 EB docker 应用程序管理 HTTPS 的最佳方式。
目前我正在使用以下方法。
-
ELB 接受 443 上的 HTTPS 连接,并转发到实例上的 HTTP 端口 80。
ELB 接受 80 上的 HTTP 连接,并转发到实例上的 HTTP 端口 8080。
实例接受端口 80 上的 HTTP 连接并转发到 docker 应用程序。
实例接受端口 8080 上的 HTTP 连接并将它们重定向到 HTTPS。
这一切都运作良好。这意味着 docker 应用程序根本不必担心重定向。它只是在端口 80 上侦听,然后就可以了。剩下的工作由 ELB 和 docker 主机完成。
我对这个设置唯一关心的是 docker 应用程序不知道它是否安全运行。如果在我的应用程序中检查这个,它会失败。
我想将我的 docker 应用程序与域名和可能更改的 SSL 证书完全分开,因此我希望继续终止 ELB 上的原始 HTTPS 连接。我想知道是否有某种方法可以让 docker 主机(或 ELB)在 HTTPS 协议中转发(重新加密)请求,但使用自签名证书,所以我可以保持它完全通用。
需要明确的是,这只会在 ELB 和/或 docker 主机和我的 docker 应用之间,而不是在浏览器之间。
如果我创建了一个不会过期的自签名证书,然后在 docker 应用程序中将其注册到网络服务器(当前使用 Apache2,但可能使用 nginx),然后简单地告诉 ELB 或 docker 主机将请求作为 HTTPS 转发,这可行吗?还是会因为证书不受信任而在某个时候崩溃?
或者有什么方法可以终止 docker app web-server 上的 HTTPS 连接,而实际上不需要预先生成证书(我猜不是,因为它可能需要生成一个即时证书或其他东西)。
是否有推荐的最佳实践方法来做这种事情?
【问题讨论】:
【参考方案1】:当您的负载平衡器终止客户端连接并转发到后端时,一个常见的解决方案是让负载平衡器在后端请求中添加标头,以填写通过让负载平衡器在那里剥离的任何信息。
ELB has a page on this 并使用以下标头:
X-Forwarded-For
- 客户端 IP
X-Forwarded-Proto
- 方案/协议
X-Forwarded-Port
- 传入端口。
您通常不允许直接来自客户端的这些标头,除非它们是受信任的客户端。我假设 ELB 会为您处理这些问题。
【讨论】:
以上是关于AWS Elastic Beanstalk VPC - 从 ELB 到实例的 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章
AWS + Elastic Beanstalk + MongoDB
使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器