![AWS 中的 HTTPS 通配符重定向](https://linux22.com/image/744875/AWS%20%E4%B8%AD%E7%9A%84%20HTTPS%20%E9%80%9A%E9%85%8D%E7%AC%A6%E9%87%8D%E5%AE%9A%E5%90%91.png)
在 AWS 中实现 HTTPS 通配符重定向的最直接方法是什么?
也就是说,我希望将 fake13124.example.com(以及任何其他此类变体)重定向到 example.com,而不是 realsub.example.com。
AWS 是否使用通配符 Route53 记录和 ALB?每年费用约为 150 美元?
一定还有比这更直接的重定向方法吗?
答案1
您可以使用 Route 53、CloudFront、Amazon Certification Manager 和 S3 来执行此操作。
在 Amazon S3 中创建一个空存储桶。选择靠近大多数观众的区域。存储桶名称无关紧要。
在存储桶上启用网站托管功能。记下控制台中的网站端点主机名。它将采用以下通用格式${bucket}.s3-website.${region}.amazonaws com
。
为存储桶定义以下路由规则。
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals></KeyPrefixEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>example.com</HostName>
<ReplaceKeyWith></ReplaceKeyWith> <!-- remove this line to preserve the original path after redirect -->
</Redirect>
</RoutingRule>
</RoutingRules>
到达存储桶端点主机名的请求将被重定向到https://example.com
。除非您删除指示的行,否则不会保留该路径。
但是您需要其他主机名,具体来说,大多数的*.example.com
。和 HTTPS。
在 us-east-1 中的 Amazon 证书管理器 (ACM) 中为 创建一个通配符证书*.example.com
。无论存储桶区域如何,这都需要是 us-east-1,因为我们将使用 CloudFront,而这是 CloudFront 与 ACM 互连的地方。
使用新的 ACM 证书创建一个新的 CloudFront 分配,使用存储桶的网站终端节点主机名作为自定义 (不是 S3) 源服务器,并指定*.example.com
为分发的备用域名(CloudFront 也将其称为“CNAME”,尽管它不是)。选择将所有 HTTP 请求重定向到 HTTPS。
*.example.com
获取分配的指定 dzzzexample.cloudfront.net 主机名,并使用它在 example.com 托管区域中的 Route 53 中创建 A 记录(对于,别名 = 是)。
等待分发进入已部署状态。
Route 53 将响应任何*.example.com
查询与区域中其他现有(或未来)记录不匹配使用最近的 CloudFront 边缘的 IP 地址。
CloudFront 会将 HTTP 重定向到 HTTPS 并使用 ACM 证书。CloudFront 会将所有请求发送到存储桶(除非它恰好缓存了对先前相同请求的响应),而 S3 会始终返回重定向响应,因为它<KeyPrefixEquals></KeyPrefixEquals>
实际上告诉 S3 检查请求的对象键中最左边的 0 个字符是否为空字符串(它始终是空字符串),并在该条件为真时进行重定向。
假设您已经在使用 Route 53,新的经常性费用(假设流量为零)为 0 美元。您将支付 CloudFront 的每请求和带宽费用以及 S3 的每请求费用,这两项费用在您收到数十万个请求之前都应该可以忽略不计。