我的公司不久前在 X 公司(具体来说是 Gandi)购买了一个域名。
我们今天的目标是通过一个唯一的 URL 来提供服务:https://www.example.com
。
因此,我们应该进行以下重定向:
http://example.com -> https://www.example.com
http://www.example.com -> https://www.example.com
https://example.com -> https://www.example.com
下面是我为了描述我们的架构而绘制的一张速写图:
如您所见,我们在 EC2 实例和用户之间有一个负载均衡器,以处理我们的 SSL 证书。
问题是:我认为只能通过 CNAME 条目访问负载均衡器。并且我无法为根域配置 CNAME 条目。
从非 www 到 www 的重定向是在 EC2 级别进行的。因此,对于http://example.com
和 来说,一切都运行良好http://www.example.com
:
我无法执行相同的操作,https://example.com
因为 EC2 实例上没有证书,并且用户将面临一条安全警报,提示证书无效。
我怎样才能摆脱这种疯狂?
我想到的一些可能的解决方案:
- 转移我的域名X公司到亚马逊。我不喜欢这个解决方案,因为我喜欢 X 公司,而且我担心转移域名。
- 为我的 EC2 实例生成免费证书以进行重定向。我不喜欢这个解决方案,因为它让我维护两个证书。
谢谢大家的提示!
答案1
背景 - 53 号公路
您不需要将域名转移到 AWS,但有一件事可能会有所帮助,那就是使用 AWS Route53 DNS 服务。它有一个“别名记录“。此记录类型的作用类似于 CNAME,可以在域根目录下工作。当您使用 AWS 负载均衡器时,这非常有用。
这并不能完全解决您的问题。您仍然需要拥有非 www 域的有效证书,并且仍然需要发出重定向。不过,这可能是解决方案的一部分。
R53 相当便宜 - 每月 0.50 美元,每百万查询 0.40 美元。
解决方案 - 证书 SAN
另一种选择是拥有一个包含 www 和非 www 域名的证书。这称为主题备用名称 (SAN),并且很容易做到。让我们加密这些而且它们是免费的。这样你就可以让你的 EC2 服务器进行重定向https://example.com->https://www.example.com
把它放在一起
我怀疑使用别名记录并更改证书可以让负载均衡器或 Cloudfront 为您执行重定向。这样可以节省 EC2 实例执行此操作的时间,而且速度会更快一些。
答案2
Cloudflare 提供“apex 别名”,而且是免费的,我将其用于几个域,效果很好。然后您可以在 CloudFlare 上进行所有设置,SSL、自动 HTTPS、重定向等...
如果 CF 不是一个选项,那么将您的名称服务器设置为 Route53 并使用别名记录。
在 AWS AppLoadbalancer 上,您可以选择将非 www 重写为 www,或将 http 重写为 https,然后将流量发送到您的实例。