从裸域提供 S3 静态网站,无需迁移到 AWS Route53

从裸域提供 S3 静态网站,无需迁移到 AWS Route53

我正在开发一个网站,我想从像 foo.com 这样的裸域提供服务,并从 AWS S3 提供服务。

但是,那我可以使用 AWS 找到的文档给我的印象是,如果我想这样做,我需要将我的所有 DNS 转移到亚马逊的 Route53。

我不想这样做,但由于我不能将 CNAMES 用于裸域,也不能将 A 记录指向固定 IP(因为它们可能会改变),所以我不确定我有什么选择。

是否有可能仅有的 将裸域名的服务委托给另一个提供商,而不需要移动所有内容?

我在 AWS 文档中看到了类似的代码片段,我可以使用 Gandi 将其添加到我的 DNS 中,但我知道这会委托全部域名处理到亚马逊名称服务器,我不认为我想要这个。

foo.com. 172800 IN NS ns-9999.awsdns-99.com.

如果我的提供商 Gandi 不支持 ALIAS 或 ANAME 记录,我该怎么办?

我知道我可以在指向带有 A 记录的 IP 上启动一个实例,然后使用它将请求从裸域反弹到托管在 www.foo.com 上的静态站点,但还有其他选择吗?但这感觉就像它会违背静态服务的目的,所以除了使用像Cloudflare, 或者维泽尔,谁帮你处理裸域名纠纷,你还能做什么?

答案1

DNS 是一个分层系统,并且根本不提供仅委托其他区域的顶点记录的机制。

最直接的解决方案是将您的 DNS 托管移至 Route 53,因为 Route 53 中的别名记录通过使用 Route 53 对 S3 域内容(以及 ELB 和 CloudFront 域内容)的内部知识来解决问题,以便对您的查询返回正确的 A 记录响应。(别名不是 DNS 记录类型,而是一种配置指令。)

我想不出有什么理由去抵制这样的改变——你不必改变你的注册员到 Route 53(尽管可以),您只需使用当前注册商更改您的权威名称服务器。您可以继续使用当前注册商进行年度续订以及他们提供的任何其他奖励/捆绑服务……但不能用于 DNS 托管本身。

其他提供商通过将传入的 DNS 请求代理到“后端”的目的地,查找目标并将响应的适当部分返回给原始请求者来实现类似功能。

这就是 Cloudflare 所做的,通过“CNAME 扁平化”——

生成响应的 CloudFlare [DNS] 服务器遵循 CNAME 链,因此对来自客户端(例如浏览器)的请求的响应仅包含非 CNAME 数据 - 通常是 IP 地址。这实际上创建了 A 或 AAAA 记录。

https://support.cloudflare.com/hc/en-us/articles/200169056-CNAME-Flattening-RFC-compatible-support-for-CNAME-at-the-root

使用具有静态 IP 地址和 A 记录的 Web 代理服务器是一种可行的选择——事实上,如果您想使用 SSL 证书为您的网站提供服务(S3 不支持自定义域的 SSL),这并不是一个坏选择。如果代理与存储桶位于同一 AWS 区域,则不会有任何额外的数据传输费用,并且给定硬件上的代理肯定可以提供比同一硬件上的实际 Web 服务器更多的内容,因为没有磁盘访问权限。(在这样一个设置上,运行 haproxy 的 t2 micro,我昨天处理了 891,683 个 Web 请求,而一分钟 CloudWatch 图表上的 CPU 使用率从未达到 5%)。当然,这会带来额外的成本和可用性问题。

但没有灵丹妙药。

相关内容