AWS 中的 HTTPS 通配符重定向

AWS 中的 HTTPS 通配符重定向

在 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 的每请求费用,这两项费用在您收到数十万个请求之前都应该可以忽略不计。

相关内容