EC2:多个域的 HTTPS 负载平衡
Posted
技术标签:
【中文标题】EC2:多个域的 HTTPS 负载平衡【英文标题】:EC2: HTTPS Load Balancing for multiple domains 【发布时间】:2015-10-20 13:34:21 【问题描述】:我想为我的 ELB 启用 https 监听器。我所有的实例都是通过自动扩展一个主实例来启动的。
通常,如果我们不在 ELB 下,则 nginx 服务器块将侦听没有 ssl_certificate 条目的 80,或者使用 ssl_certificates 侦听端口 443 ssl。
查看 AWS 文档,它没有回答我以下问题:
1) By default, when HTTPS is selected as a load balancer protocol, the instance protocol would be HTTP.这是为什么?我们不需要保护 ELB 和实例之间的连接吗?
2) 我已经有多个证书。通配符和单个子域的通配符,以及自签名证书。如何将它们移动到 AWS 允许我编辑的三个块(私钥、公钥证书和证书链)。
3) 接下来,如果实例协议将是 HTTP,我是否要删除服务器块中的 SSL 配置?它应该监听 80 端口吗?
【问题讨论】:
为什么实例协议是HTTP?为什么不使用 HTTPS,这样您就可以从客户端 ---> ELB ---> 实例一路安全连接? 【参考方案1】:单个 Elastic Load Balancer 将流量路由到一组实例,它并非旨在为多个域路由流量(无虚拟主机)。
例子
/---- :80 Instance A
ELB:80 :443 ----- :80 Instance B
\---- :80 Instance C
常见的设置是面向 Internet 的 ELB,接受 HTTP:80 和 HTTPS:443 连接。在 HTTPS:443 的情况下,它可以处理 SSL 终止,这意味着它将接受 HTTPS,处理 SSL 并将流量路由到 HTTP:80 上的实例。
由于实例位于私有子网中,并且 ELB 和实例在您的 VPC 中通信,因此不需要 SSL。
对于 SSL 终止,您需要为每个 ELB 提供 SSL 证书链(三个块)。
【讨论】:
感谢您的参观。我仍然不确定如何将多个证书编译成一个我可以填写他们希望我填写的框的证书。我还应该从 nginx 中删除 listen 443 ssl,因为我收到了对实例的 HTTP 80 请求吗? 如果客户端有专门为这些客户端设置的服务器,ELB 是否仍然相关?【参考方案2】:您可以将多个证书连接在一起
cat 1.crt 2.crt > 3.crt
是的,所有 nginx 443 ssl 配置都应该被删除,并且要强制使用 HTTPS,你应该添加 X-Forwarded-Proto
标头。
【讨论】:
以上是关于EC2:多个域的 HTTPS 负载平衡的主要内容,如果未能解决你的问题,请参考以下文章
VPC 中的 AWS beanstalk EC2 实例且没有负载平衡
我是不是需要在 DB 上进行会话集群以在 AWS/EC2 上使用 HAProxy 对 Jetty WebSockets 服务器进行负载平衡?
AWS 使用 Fargate 对 ECS 服务的多个端口进行负载平衡