AWS:如何在 App Load Balancer 上将 HTTP 重定向到 HTTPS?

AWS:如何在 App Load Balancer 上将 HTTP 重定向到 HTTPS?

我在 App Load Balancer (ALB) 后面有多个 IIS Web 服务器。这些 Web 服务器均具有自签名 SSL 证书安装并使用 URL 重写模块正确从 HTTP 重定向到 HTTPS 设置:

在此处输入图片描述

如果我直接访问这些 Web 服务器,HTTP 将被重定向到 HTTPS。

目标群体使用的协议是 HTTPS。ALB 监听 HTTP 和 HTTPS。它在“www.mysite.com”上拥有 SSL 证书。

但是,当我尝试使用 HTTP 访问 ALB 时,它不会被重定向到 HTTPS。既然服务器确实可以正确重定向,那为什么 ALB 却不能呢?

答案1

现在可以直接在任何 ALB 规则中执行一些重定向,请参阅相关AWS 公告

要无条件地将所有查询从 HTTP 重定向到 HTTPS,您必须仅使用默认规则/操作配置 HTTP 侦听器,以使用 HTTPS 协议将具有相同主机、路径和查询的所有请求永久重定向(301)到 HTTPS 端口(通常为:443): 具有永久重定向的 AWS ALB HTTP 到 HTTPS 配置

答案2

假设您在 EC2 实例中运行 Microsoft Windows,并使用 IIS 配置两个网站,siteA 和 siteB。将 siteA 设置为绑定在端口 81,将 siteB 设置为绑定在端口 82。

步骤 1:
在 AWS 控制台中,选择“负载平衡”下的“目标组”。创建两个目标组:
1. siteA-target-group,其中包含您的 Web 服务器实例 ID 和端口 81
2. siteB-target-group,其中包含您的 Web 服务器实例 ID 和端口 82
注意:您可以在目标组中添加更多 Web 服务器实例,以实现负载平衡和故障转移。

步骤 2:
在 AWS ALB 中,有两个监听器,一个用于端口 80,一个用于端口 443。

对于 HTTP (80),添加 2 条规则:
1. 如果主机是 siteA.com,则重定向到https://#{host}:443/#{path}?#{query}
2. 如果主机是 siteB.com,则重定向到https://#{host}:443/#{path}?#{query} 在此处输入图片描述

对于 HTTPS (443),添加 2 条规则:
1. 如果主机是 siteA.com,则转发到 siteA-target-group
2. 如果主机是 siteB.com,则转发到 siteB-target-group

步骤 3:
在您的 DNS 提供商上,为 siteA.com 设置 CNAME 以指向 ALB 的 DNS 名称。同样,为 siteB.com 设置 CNAME。

完成上述设置后,测试连接到http://siteA.com或者http://siteB.com

i) 流量到达 ALB 端口 80
ii) 主机头与规则“siteA.com”匹配并将流量重定向到端口 443
iii) 流量到达 ALB 端口 443
iv) 主机头与规则“siteA.com”匹配并转发到目标组 siteA-target-group
v) siteA-target-group 指向 Web 服务器上的端口 81 并提供服务。

相关内容