我管理多个网站,目前具有以下 DNS 配置:
example.com - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com - CNAME - example.com
beta.example.com - CNAME - test.example.com
dev.example.com - CNAME - test.example.com
这是 CNAME 记录的适当用法吗?我在网上查过,但还没有找到明确的答案。有些人声称 CNAME 记录不好(但他们并不清楚为什么会这样),并建议进行以下设置:
example.com - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com - A Record - Production Server IP
beta.example.com - A Record - Test Server IP
dev.example.com - A Record - Test Server IP
哪一个是更好的方法(以及为什么)?
笔记:子域名不需要自己的 MX 记录,因此这不是问题。
答案1
是的,这是对 CNAME 的恰当使用。在我参与的讨论中,争论往往是这样的:
针对 CNAME:
- 存在(微小的)性能损失,因为下游 DNS 缓存需要执行 2 次 DNS 查找,一次针对 CNAME,一次针对 CNAME 指向的 A 记录。
- 关于 CNAME 的“权威性”较低或兼容性问题的模糊、虚假论点。
支持 CNAME:
- 它们在硬件(物理服务器)和服务之间提供了清晰的抽象。
- 它们简化了 DNS 管理——当服务器移动时,您只需更改一条记录。
在尝试了几种不同的方法后为了做到这一点,我现在有了一个我个人最喜欢的风格。它是:
- 每台物理服务器一个 A 记录;TTL 值比较低(可能为 30 分钟);为服务器提供人性化的名字。
- 每个服务一个 CNAME;具有较高的 TTL(可能是 24 小时);指向上述服务器名称。
- 作为上述规则的唯一例外,域根是 A 记录,指向 Web 服务器/Web 负载均衡器。(@ 必须是 A 记录。)
我发现这个设置效果很好。它减少了对 CNAMES 的额外 DNS 查找;如果服务器崩溃,我仍然可以相当快地更改公共 DNS。
这是一个(即兴的)例子在 BIND 语法中:
;name ttl class rr value
server01 30m IN A 192.168.0.3
server02 30m IN A 192.168.0.4
webmail 24h IN CNAME server01
extranet 24h IN CNAME server02
ftp 24h IN CNAME server02
答案2
是的,合适的。
我的最佳实践(许多人都分享过)是为每个服务器 IP 创建 1 个 A 记录;并将其他任何内容使用 CNAMES。
一个常见的例子是:
server1.example.com. IN A 192.168.0.1
server2.example.com. IN A 192.168.5.2
www IN CNAME server1
ftp IN CNAME server1
beta IN CNAME server2