子域名应使用 CNAME 吗?

子域名应使用 CNAME 吗?

我管理多个网站,目前具有以下 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

相关内容