amazon-web-services - 要合并 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 岁:
然而,他们的解决方案是不同的,我试图理解权衡。
前者建议我:
- 编辑 www.mywebsite.com 的 Route 53 A 记录以指向www.mywebsite.com的 S3 存储桶(而不是 CloudFront 分配),并且
- 修改 CloudFront 分配以从其 CNAME中删除www.mywebsite.com 。
请注意,我指的是提问者的解决方案(不是接受的答案),而这个问题的域重新映射与我的相反。
后者建议我:
- 创建第二个 CloudFront 分配,将www.mywebsite.com映射到相应的 S3 存储桶(编辑我的www.mywebsite.com的 Route 53 A 记录以指向这个新分配),并且
- 将现有 CloudFront 分配修改为仅处理 mywebsite.com。
所以这两种解决方案的第二步是相同的,但第一部分不同,我试图了解这会产生什么影响。
基本上,差异似乎归结为该序列中的第二步是否存在:
- www.mywebsite.com 的 Route 53 A 记录 -->
- 第二个 CloudFront 分布 -->
- 带有重定向的空 S3 存储桶 -->
- mywebsite.com 的 Route 53 A 记录 -->
- 原始 CloudFront 分配(触发 Lambda@Edge)-->
- 带有实际网站文件的 S3 存储桶
如果用户使用 http 或 https 进入 mywebsite.com,我们从第 4 阶段开始,据我所知没有区别。但是我不清楚如果用户输入http://www.mywebsite.com或https://www.mywebsite.com ,这个 CloudFront 分配会有什么不同:
- http://www.mywebsite.com在这两种情况下是否同样有效?
- https://www.mywebsite.com是否会在没有第二个 CloudFront 分配的情况下被破坏,因为 S3 存储桶仅支持 http?
- 由于所有请求最终都在步骤 5 中通过 CloudFront,我假设 Lambda@Edge 只需要在那里触发?
最后,我是否正确,我是否将www.mywebsite.com重定向到 mywebsite.com 或反之亦然?我之所以选择前者,是因为这就是 AWS 文档在设置 S3 存储桶时指导我的方式,但他们的 CloudFront 说明还确保 API Gateway + CORS 会因不合并两个域而失败,所以我想确保我没有绘画自己进入另一个未来的角落。
解决方案
推荐阅读
- vuejs2 - 表单生成中的 div 组件(按模式)未按预期工作
- android - 如何在 Android 中为进度条的进度设置动画?
- c# - 无法在没有 StructureMap 的情况下使用 MediatR 解决 Fluent Validation
- angular - 我无法使用 angular 显示来自 firebase 的单个产品
- java - 什么是可能的精度损失?
- javascript - 如何创建一个将 DOM 属性添加到属性的 JavaScript 循环?
- javascript - 仅使用 javascript 更改 CORS 策略?
- docker - 无法在公共 GKE 集群中的 pod 上访问互联网
- java - 重新排序字符串
- android - 覆盖 ArrayAdapter getView() int 位置