这可能看起来很晦涩,也可能很小众,但请耐心等待。
情况是:
- www.domain.com 指向 EC2 中的基础设施,特别是 ELB
- domain.com 指向 EC2 中的一个微型实例,并且是一个 nginx 服务器,其唯一目的是将所有请求重定向到 www.domain.com
- 所述微实例是单点故障,因为只有其中一个
我们想要做的是删除 SPOF,以便让多个服务器运行此重定向。将根域设置为 CNAME 以使用 ELB 违反了我相信的 RFC,而且我不相信我们的 DNS 主机无论如何都会允许我们这样做。
鉴于这些限制,我们应该怎么做才能消除此 SPOF?诚然,如果它因任何原因消失,但企业希望减轻这种风险,影响很小。
有更好的方法来处理顶点域,而不是在 EC2 上托管“重定向器”实例。
您可以在 Amazon S3 上托管静态网站,可以将其配置为将您的请求重定向到特定域。如果您使用的是 Route53 - 有一个“别名”记录类型可以帮助您实现这一目标。其他 DNS 提供商也有类似的。
按照此博客文章了解详细信息https://aws.amazon.com/blogs/aws/root-domain-website-hosting-for-amazon-s3/
S3 是容错服务,因此您肯定会以相当低的成本移除您的 SPOF。
如前所述,S3 静态托管是一个不错的选择,但它需要托管在 Route 53 中的别名记录……而且它不支持 TLS。
可以通过在 S3 前面使用 CloudFront 为托管在 S3 存储桶上的站点提供 TLS(适用于支持 SNI 的浏览器),这可以完美运行,但还需要 Route 53 中的别名。
请注意,别名不是一种 DNS 记录。Alias 是 Route 53 DNS 服务器中的一个内部配置指令,它表示“当我们在此处收到对该记录的请求时,我们将在内部(在 Route 53 数据库中)查找并返回与如果我们返回的结果相同的结果。实际上已经收到了另一份不同记录的请求。” 最后,它提供了一个看起来类似于 CNAME 的功能,但不是告诉解析器要将一个主机名视为另一个主机名,并查找另一条记录以获取更多信息,Route 53 在内部执行该查找步骤,使解析器对用于满足请求的实际机制一无所知......和这种内部(而非外部)查找机制是别名记录在区域顶点按需要工作的原因,而 CNAME 却没有。
除非您有一个可以适应动态 IP 地址的 DNS 机制(如 S3 和 CloudFront 上的托管站点所需要的那样),否则没有消除 SPOF 的可靠方法,尽管其他一些 DNS 提供商支持类似于 Route 53 的别名记录的功能。例如,CloudFlare 将其称为“CNAME 扁平化”,其中他们的 DNS 服务器在收到对您的 A-Record 的查询时,会在后端查找不同的 A-Record(在不同的域中,例如来自 s3.amazonaws.com 或 cloudfront.net),然后将该答案返回给请求者。这实现了与别名相同的最终结果。对于第 3 方 DNS 服务器来说,这并不是真正的“内部”,但由于第二个请求是向后发送的,因此客户端解析器不会发现任何异常行为。
2015 年 1 月,AWS 宣布了 EC2 Instance Auto-Recovery,它将拆除并重建一个未能通过 Cloudwatch 可用性检查的实例,创建一个具有相同“一切”的新实例——实例 ID、EBS 卷、弹性 IP 等.,并且此功能适用于多个实例类,包括 t2 类。
或者,作为最后的手段,您可以通过配置多个这些重定向机器并在您的区域顶点配置多个 A 记录来实现循环“负载平衡” ,从而部分缓解 SPOF。这将减少但不能消除其中一台机器停机的影响,尽管这种解决方案的可行性在很大程度上取决于浏览器的行为。它不会被视为“高可用性”解决方案,但(也许)总比没有好。
如果我正确理解此评论,那么您实际上必须在那里执行 TLS。如果我将浏览器指向
https://example.com
,则该端点必须使用 TLS并且具有有效的主机名证书,否则链接会被有效破坏——如果服务器无法以保持浏览器开心。