我正在创建登陆页面创建和托管服务。我的客户将能够将他们的域名链接到他们的帐户。我正在使用 AWS 和 Route 53。
我正在考虑两个潜在的系统:
- 让我的客户更改他们的名称服务器以解析我为他们创建的托管区域
或者
- 让我的客户创建一个 CNAME 记录,该记录指向与其帐户链接的我的唯一子域。
每种方法的优点和缺点是什么?是否有明显更好的解决方案?
答案1
我的策略如下。除了考虑什么有效、什么无效之外,我的做法还基于尽量减少未来客户的互动。你不会想联系数百甚至数十个客户来让他们协调某种改变。
当不在区域顶点时,我有一个专门用于此目的的域名。假设我的我用于这些目的的域名是network.example.org
。
我让客户端创建一个 CNAME。如果新站点的主机名是,client.example.com
那么我让客户端创建一个指向的 CNAME client.example.com.network.example.org
。然后,在 Route 53 中,我将client.example.com.network.example.org
主机名创建为我的 ELB 端点或 CloudFront 的 A 记录别名,或者只是弹性 IP 的 A 记录。(或者,如果有理由,我可以将其设为另一个 CNAME。它们确实会级联。)
这种配置的意义在于,我绝不必须要求客户重新配置任何内容。无论我的网络如何变化——我需要将它们移动到不同的 ELB、将它们迁移到不同的区域等,我都可以在 Route 53 中进行更改。
对于区域顶点,这是不可能实现的,因为 CNAME 是不可能的,但是通常当客户想要将区域顶点指向我的系统时,客户无论如何都不会将该域用于其他任何用途。如果他们这样做了,他们可能不会将顶点指向我……所以我在 Route 53 中创建托管区域并为他们提供 4 个指定的名称服务器。如果客户需要额外的记录,我会将它们添加进去。(您也可以创建一个可重用委托集在 Route 53 中使用 API 或 CLI,对于白标 DNS 服务器,为客户端提供 ns1...ns4.example.org,而不是“awsdns”主机名,但如果您打算进行任何基于地理/延迟的路由,这可能并不理想。)
当我向客户解释我的 DNS 与平台的其他部分集成在一起,允许我托管他们的 DNS 使我能够通过动态更新他们的 DNS 记录自动缓解中断和 DDoS 攻击时,这几乎总是很容易说服他们。我托管 DNS 并添加 MX 记录,无论他们需要什么,但通常都不需要。
在一个特殊情况下,客户坚持不仅要保留对 DNS 的控制权,网站处于顶点,而且要让员工在防火墙后面访问相关网站 - 因此他们无论如何都希望网站有一个固定的 IP 地址 - 我使用具有弹性 IP 地址的 EC2 实例解决了这个难题,该实例是运行 HAProxy 的 t2.micro,它将流量转发到我的后端系统。HAProxy 编写得非常好,以至于这台 10 美元的机器在过去 24 小时内处理了 896,392 个 http 请求,并且从未超过 6% 的 CPU 利用率。(而且它还在动态压缩文本、css 和 js。)客户创建了一个指向弹性 IP 的 A 记录,如果情况需要,我仍然可以在区域内重新映射它。
当然,在区域顶点,如果客户端使用支持某种“A-Name”记录的 DNS 提供商(例如 CloudFlare 的“CNAME 扁平化”),那么我会恢复到“不在顶点”的配置并在我的域中为他们提供一个以其域为前缀命名的目的地,这样我就可以保留在没有他们干预的情况下修改配置的能力……但这种情况从未出现过。
答案2
传统上,除非您收取的服务包括完整的 DNS 管理,否则您不会想要更改名称服务器。您的客户想要的任何更改(设置 google / office 365 商业帐户等)都需要由您完成。由于您需要问这个问题,我怀疑这不是您的意图。
这样,您的客户端就只剩下输入 A 或 CNAME 记录的两个选项了。CNAME 记录对于像这样的根域来说无法可靠地工作example.com
。因此,在这种情况下,最好的解决方案是最简单的 - 您的客户端为您为其配置的 IP 地址创建一条 A 记录。
编辑:
根据对 ELB 的进一步评论,您需要为您的客户端执行类似这样的操作。仅当您希望根域转发正常工作时才需要第二行。
CNAME: www.example.com -> my-aws-01-elb.aws.amazon.com
CNAME: example.com -> www.example.com