首页 > 解决方案 > 要合并 www 和非 www,我应该使用 Route 53 中的 A 记录还是两个 CloudFront 分配?

问题描述

问题

我有一个托管在 AWS S3 上的静态网站。有两个存储桶:mywebsite.com 托管实际文件,www.mywebsite.com重定向到前者。该域在 Route 53 中注册,我有一个 CloudFront 分配来加快速度并确保使用 https。我还使用 Lambda@Edge 添加了安全标头

我的网站连接到 API 网关,并且由于 CORS 不允许多个域(即 mywebsite.com 和www.mywebsite.com),我需要确保对www.mywebsite.com的所有请求都重定向到 mywebsite.com(此外到 http 重定向到 https)。此域重定向发生在我只有 S3 时,但是在遵循 AWS 文档添加 CloudFront之后,情况不再如此:

如果浏览器不再将您重定向到根域(例如http://example.com),则新的 A 记录就位。

所以问题是:如何在恢复域重定向的同时保留 CloudFront 的优势?

研究

我发现了两个相关的 SO 问题,都大约 5 岁:

  1. 如何在aws s3存储桶和云端将非www重定向到www
  2. 通过单个 CloudFront 分配支持 HTTPS URL 重定向

然而,他们的解决方案是不同的,我试图理解权衡。

前者建议我:

请注意,我指的是提问者的解决方案(不是接受的答案),而这个问题的域重新映射与我的相反。

后者建议我:

所以这两种解决方案的第二步是相同的,但第一部分不同,我试图了解这会产生什么影响。

基本上,差异似乎归结为该序列中的第二步是否存在:

  1. www.mywebsite.com 的 Route 53 A 记录 -->
  2. 第二个 CloudFront 分布 -->
  3. 带有重定向的空 S3 存储桶 -->
  4. mywebsite.com 的 Route 53 A 记录 -->
  5. 原始 CloudFront 分配(触发 Lambda@Edge)-->
  6. 带有实际网站文件的 S3 存储桶

如果用户使用 http 或 https 进入 mywebsite.com,我们从第 4 阶段开始,据我所知没有区别。但是我不清楚如果用户输入http://www.mywebsite.comhttps://www.mywebsite.com ,这个 CloudFront 分配会有什么不同:

最后,我是否正确,我是否将www.mywebsite.com重定向到 mywebsite.com 或反之亦然?我之所以选择前者,是因为这就是 AWS 文档在设置 S3 存储桶时指导我的方式,但他们的 CloudFront 说明还确保 API Gateway + CORS 会因不合并两个域而失败,所以我想确保我没有绘画自己进入另一个未来的角落。

标签: amazon-web-servicesamazon-s3amazon-cloudfrontamazon-route53

解决方案


推荐阅读