在生产启动期间,我需要一个子域名 beta.foo.bar.com 来开始将所有请求重定向到 foo.bar.com。
AWS 建议使用为静态网站托管设置的 S3 存储桶,并将其配置为将所有请求重定向到另一个域。这对于 http 来说很有效,但对 beta.foo.bar.com 的 https 请求会超时,因为 S3 似乎无法处理 https。
这两个 DNS 记录都是 CloudFront 分发的 A 别名,而 CloudFront 分发又有自己的 CNAME 记录,最终指向 ELB。这是由一个现已离职的人设置的,我承认我对 CloudFront 分发/来源还不够了解。是否有一些 CloudFront 分发/来源/CNAME 的可能组合可以处理 http、https、和重定向?
注意:应用程序本身可以接收 http 但使用 ebextension 重写为 https;可能可以在那里进行重定向,但我更愿意在 AWS 上解决它。
答案1
实现起来非常简单。
- 对于 CloudFront,请确保您使用的 SSL 证书具有两个域名。如果没有,请重新生成证书并附加到两个 CloudFront 分发版。
- 等待 CloudFront 重新配置。
- 重新测试两个域是否仍正常工作。
- 在 Route 53(或您的 DNS 提供商)中,将 beta.foo.bar.com 的 ALIAS 记录更改为指向 foo.bar.com 的 CloudFront 分发
DNS 需要一段时间才能让全世界更新其记录(如果 TTL 设置得较短,许多 DNS 服务器就不会遵循 TTL),因此请提前做好计划。
从从未访问过您的域名的另一个系统进行测试,并验证 DNS 全局更新时一切是否正常。
答案2
我不喜欢使用太多花哨的 AWS 技巧,所以我只需设置一个 ALB(并让它执行 HTTPS),然后在 ASG 中设置 EC2 实例,并使用一个重定向到另一个域的小型静态 nginx 配置。这种方法的好处是,它几乎无需修改即可应用于任何其他云提供商,以备明年确定其他新事物时使用。
但是,如果您决心使用全部 AWS,IIRC 首选的 SSL-in-front-of-S3 方法是让 CloudFront 完成 SSL,它指向 S3 bucket,然后可能会执行重定向。我从未尝试过,所以 CloudFront 可能会接受重定向或执行其他无用的操作,但可能值得一试。
答案3
感谢大家的帮助。事实证明这非常简单。我所要做的就是在 beta.foo 的 CloudFront 发行版中,将重定向 S3 存储桶添加为源,然后编辑默认行为以使用该源而不是 ELB 端点。无需更改 DNS 甚至在 CloudFront 中强制 http->https。即使在 CloudFront 重新部署时,重定向也会立即生效。