Route53 的 AWS S3 重定向不适用于 HTTPS

ato*_*ake 21 dns amazon-s3 amazon-web-services amazon-route53

我尝试使用 AWS S3 静态网站重定向来允许从 Apex 域 (example.com) 重定向到www.example.com域。

我使用了以下指南https://medium.com/faun/redirect-naked-domain-to-www-with-https-on-aws-route-53-e620e4ce989d

在Route53中,我为顶点域创建了A记录example.com

example.com    A    Simple   s3-website-eu-west-1.amazonaws.com.
Run Code Online (Sandbox Code Playgroud)

指向www.example.domain分发我的网站的 cloudfront 分发版。cloudfront 域会将所有 HTTP 流量重定向到 HTTPS

www.example.com   A    Simple    *************.cloudfront.net.
Run Code Online (Sandbox Code Playgroud)

在 S3 中,我创建了一个存储桶example.com并将其设置为重定向所有请求 [example.com s3 存储桶重定向规则 水桶是公共的并且是空的

结果行为适用于 HTTP,但适用于 HTTPS 则超时

http://example.com -> https://www.example.com
https://example.com -> ETIMEDOUT
http://www.example.com -> https://www.example.com
https://www.example.com -> https://www.example.com
Run Code Online (Sandbox Code Playgroud)

我该如何修复这个设置,以便 https://example.com -> https://www.example.com

Aid*_*din 60

问题描述

\n

因此,理想情况下您希望以下所有内容都能发挥作用:

\n
1) https://example.com     \xe2\x86\x92 https://www.example.com   (naked to www)\n2) http://www.example.com  \xe2\x86\x92 https://www.example.com   (http to https)\n3) http://example.com      \xe2\x86\x92 https://www.example.com   (naked http to www https)\n4) https://www.example.com \xe2\x86\x92  actually show the content as the canonical URL! \n
Run Code Online (Sandbox Code Playgroud)\n

请注意,上面的要求 #3 可以分为两个步骤,这将是 #1 和 #2 的组合。

\n
3B) http://example.com \xe2\x86\x92 http://www.example.com \xe2\x86\x92 https://www.example.com\n
Run Code Online (Sandbox Code Playgroud)\n

所有这些\xe2\x86\x92都是 HTTP 301 永久重定向。

\n

要求

\n

所以,你需要 3 块:

\n
    \n
  1. URL重定向( example.com \xe2\x86\x92 www.example.com)
  2. \n
  3. [HTTPS支持] SSL证书覆盖裸子域以及www(可以二合一,在认证管理器中免费)
  4. \n
  5. [HTTPS 支持]协议重定向( http:// \xe2\x86\x92 https://)
  6. \n
\n

解决方案

\n

该解决方案需要 AWS 中的许多部分,而这些部分应该都是免费的!(或无需额外费用)

\n

步骤 1) 在 S3 中创建 URL 重定向

\n

创建 S3 静态托管网站并将其重定向到www.example.com。\n在此输入图像描述

\n

笔记:

\n
    \n
  1. 确保它可以公开访问。
  2. \n
  3. 测试该 URL 是否有效,并且登陆该 URL 后实际上会进行重定向。(或通过在终端中测试curl -v
  4. \n
  5. 始终测试包含该区域的完整 URL (即.s3-website-us-west-2.amazonaws.com
  6. \n
\n

步骤2)在证书管理器中为裸域创建SSL证书

\n

转到https://us-west-2.console.aws.amazon.com/acm/home?region=us-west-2#/(将您的区域更改为您的首选区域)并请求公共证书。确保同时输入example.comwww.example.com放在那里。在 Route 53 中验证它。

\n

步骤 3) 在 CloudFront 中创建协议重定向

\n

转到 CloudFront 并使用查看器协议策略创建分配创建一个分配,并将其来源设置为上面 S3 存储桶的完整 URL。

\n

在此输入图像描述

\n

笔记:

\n
    \n
  1. 不要将其直接指向 S3。让我们指向S3存储桶的静态网站的完整URL。
  2. \n
  3. 缓存策略可以是无缓存。
  4. \n
  5. 备用域名应该是您的 example.com,并且应将步骤 2 的 SSL 认证输入其中。
  6. \n
  7. 在“来源”选项卡中验证您是否指向 S3 完整 URL 路径。
  8. \n
\n

步骤4)在Route53中拥有DNS记录

\n

最后,转到您的route53 DNS记录,并将其作为记录A指向第3步的CloudFront分配,这应该是这样的d21k2s1234123.cloudfront.net

\n

在此输入图像描述

\n

田田!

\n

  • 实现如此常见的用例是疯狂的,但仍然是唯一的方法! (14认同)
  • 通过直接在 Cloudfront 中选择存储桶而不是粘贴到存储桶网站端点(URL 中包含“网站”的端点),我陷入了困境。啊。最终在 https://aws.amazon.com/premiumsupport/knowledge-center/route-53-redirect-to-another-domain/ 的帮助下弄清楚了 (3认同)
  • 多么奇怪的谜题啊……但是这个答案对我来说是救星,非常感谢,伙计。 (2认同)
  • 谢谢,这对我帮助很大。我只有一件事需要优化。不要在 CloudFront 分配中使用 http 到 https 重定向。同时允许 http 和 https,而是在 S3 重定向中选择 https。这将导致 301 重定向跃点减少,并且您仍然始终会到达加密的 www 端点。 (2认同)
  • 此外,对于 S3 中的 301 重定向,存储桶不需要可公开访问。 (2认同)

jel*_*csc 4

问题是 S3 静态网站托管不支持 HTTPS。[参考]

因此,您需要在 s3 存储桶前面添加 CloudFrontexample.com并配置指向它的正确 DNS 记录