假设场景是您有 3 个使用不同端口的容器化 (docker) Web 应用程序——1234、5678、7890。
是否可以有一个应用程序负载均衡器将来自 app1.example.com、app2.example.com 和 app3.example.com 的 HTTP/HTTPS 流量转发到 EC2 目标组上的特定端口?
示例:来自 app1.example.com 的所有流量都应流向 EC2 目标组的端口 1234。
此外,由于 ELB 将有多个子域,因此 SSL 证书设置是什么?
假设场景是您有 3 个使用不同端口的容器化 (docker) Web 应用程序——1234、5678、7890。
是否可以有一个应用程序负载均衡器将来自 app1.example.com、app2.example.com 和 app3.example.com 的 HTTP/HTTPS 流量转发到 EC2 目标组上的特定端口?
示例:来自 app1.example.com 的所有流量都应流向 EC2 目标组的端口 1234。
此外,由于 ELB 将有多个子域,因此 SSL 证书设置是什么?
为此,首先您需要创建 3 个单独的目标组,每个目标组都包含您要重定向到的相同 EC2,并根据每个应用程序的目标端口(1234、5678 等)进行区分。
完成此操作后,您可以创建一个具有 2 个侦听器的新 ALB,一个用于端口 80 上的 HTTP,另一个用于端口 443 上的 HTTPS。如果您通过 AWS 控制台创建它,请设置您要使用的可用区,为 HTTPS 侦听器选择安全策略和证书,然后选择或创建安全组。对于路由配置,只需创建一些新的任意目标组。我们稍后将简单地删除它(向导不会让您在创建时选择适当的选项)。
创建 ALB 后,我们需要编辑 2 个侦听器的规则。因此,选择 ALB,转到侦听器选项卡,然后单击其中一个侦听器旁边的“查看/编辑规则”链接(请注意,这不是选择侦听器并单击“编辑”,这是完全不同的)。现在在这个新屏幕上,单击铅笔编辑当前的默认规则,删除当前的“THEN”操作,并将其替换为“Return fixed response...”。对于此处的字段,我只需设置 400 的响应代码,响应正文类似于“无效的主机标头”。仅当客户端尝试使用我们将明确设置的主机以外的主机访问此负载均衡器时,才会返回此信息。
现在单击“更新”按钮以保存此默认规则的更改,然后单击“+”按钮在默认规则上方添加新规则。对于这个新规则,添加条件“主机是...”,并将其设置为应用程序域之一(即 app1.example.com)。现在将此规则的条件添加到“转发到...”,然后选择您之前创建的此应用程序的目标组。
现在对您需要为此负载均衡器服务的所有应用重复第 4 步
现在为 ALB 上的另一个侦听器重复步骤 3-5
现在,您可以通过控制台中的向导删除之前在创建 ALB 期间创建的额外目标组。除此之外,你应该完成。
注意:没有办法让单个 HTTPS 侦听器使用多个不同的证书,即使您可以基于主机标头进行路由。为了使 SSL 在多个不同的应用程序中有效,您将需要使用同时对所有应用程序有效的通配符证书。如果您使用 ACM,您可以生成免费的通配符证书并在 ALB 上使用它们。
编辑 9/12/2019:AWS Now 为其 NLB 提供 SNI,这意味着您现在可以为单个负载均衡器使用多个不同的 TLS 证书:https ://aws.amazon.com/about-aws/whats-new/ 2019/09/elastic-load-balancing-network-load-balancers-now-supports-multiple-tls-certificates-using-server-name-indication/