![在 AWS ELB 中的多个 EC2 实例上扩展多个 SSL 域](https://linux22.com/image/629793/%E5%9C%A8%20AWS%20ELB%20%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%20EC2%20%E5%AE%9E%E4%BE%8B%E4%B8%8A%E6%89%A9%E5%B1%95%E5%A4%9A%E4%B8%AA%20SSL%20%E5%9F%9F.png)
我正在设置服务器,该服务器将在广泛的负载平衡 EC2 实例上托管多个 SSL 域,并且作为一名在网络/基础设施方面非常糟糕的程序员,我有一些疑问:
我假设通过使用 ELB,我只需要在 ELB 下设置一次 HTTPs 并在那里安装证书,而不是在实际实例上?
对于 SSL,使用 ELB 时是否仍需要为每个站点设置单独的 IP 地址,或者从 ELB 到实例的通信是否通过 HTTP 运行?
将网站指向 elb 的最佳方法是什么? CNAME 记录到亚马逊 ELB 实例名称?
我应该为此使用负载均衡器吗?我这样做对吗?
我完全愿意接受有关此问题的任何其他建议/帮助。
感谢您的帮助。
答案1
你走在正确的道路上。
ELB 可以是 SSL 终止代理。在这种情况下,您只需在 ELB 上设置一次 HTTPS,然后在那里安装证书,而不是在实例上安装。
传统上,对于 SSL,您需要 Web 服务器名称与证书中的 CN 匹配。现在情况已经发生了变化。请参阅http://en.wikipedia.org/wiki/Secure_Sockets_Layer#Support_for_name-based_virtual_servers因此,在任何情况下,您都不需要为每个站点(包括 ELB 终止 SSL)提供单独的 IP 地址。
您可以配置 ELB 以终止 SSL 并与实例通信 HTTP。
亚马逊强烈建议您的网站将 CNAME 添加到 ELB 实例名称(或多个名称,多可用区 ELB 每个可用区返回 1 个名称)。IP 地址可能会发生变化,尤其是当您的 ELB 因流量高峰而非常 E 时。
如果您的 ELB 将是多可用区的,我还会研究“弹性负载平衡的 DNS 故障转移”。
我强烈建议你阅读亚马逊关于 ELB 的文档http://aws.amazon.com/elasticloadbalancing/。所有这些问题都得到了解答——甚至更多!——在那里得到了解答,并且有最佳实践。这将比通过 Serverfault 问题获得零碎的理解更好。(当然,如果您想澄清文档,SF 可能是提问的好地方。)
答案2
看来 ELB 只能处理单个证书。
如果您使用通配符证书,并且所有域名都包含在通配符中,或者您使用多域名证书(也称为 UCC 证书),那么也可以使用。
否则,如果您拥有多个域的多个证书,您的选择是:
ELB 上的证书,每个证书一个 ELB
在此场景下,每个证书都会获得自己的 ELB。ELB 仍指向相同的实例。您在 ELB 上安装证书,然后由其处理 SSL 终止。
优点:当证书被撤销/替换/更新时,它会变得更容易。还可以让实例免于管理 SSL 连接。从理论上讲,它也更安全,因为 ELB 很可能不太容易受到潜在漏洞的影响。
缺点:更昂贵(每个证书一个 ELB,而不是一个 ELB)。自动缩放可能无法预测,与一个 ELB 关联的自动缩放组可能会做出与与另一个 ELB 关联的自动缩放组不同的决策。
实例上的证书
让 ELB 传递 SSL 请求而不是终止它。您在每个实例上安装所需的所有证书,并设置它们以监听端口 443 并处理安全连接。
优点:大概轻微地即使 SSL 处理负载增加,成本也会降低。对实例的运行情况有更好的控制。
缺点:当证书被撤销/更新/创建时,更新证书确实非常耗时。您必须将证书部署添加到部署流程中。如果您的实例从 AMI 启动,并且证书存储在 AMI 上,则必须使用这些证书生成新的 AMI,并终止证书无效的实例。如果您只有几个实例,则使用 rsync 或 scp 在每个实例上手动替换证书是一种选择,但效果相当糟糕。