我管理着多个当前具有以下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记录,因此这里不是问题。

评论

我觉得这应该是维基的答案。 DNS很难正确解决,六年后这个公认的答案仍然很好吗?

@ the0ther是的,即使在今天,来自Jesper Mortensen的经过验证的答案仍然有效(即使有人可能会争辩事物的名称或要使用的正确TTL值,但这与是否使用CNAME记录的问题是分开的)。 DNS是30年前的旧协议,因此诸如CNAME记录之类的基本信息不会随时间变化。

#1 楼

是的,这是对CNAME的适当使用。在我参与的讨论中,争论往往是这样的:

反对CNAME:由于下游DNS缓存需要执行2个DNS查找,一个用于CNAME,一个用于CNAME指向的A记录。 >
支持CNAME:


它们在硬件(物理服务器)和服务之间提供了清晰的抽象。
它们简化了DNS管理-当服务器移动时,您只需要更改一条记录即可。

尝试了几种不同的方法后,我现在有了个人喜欢的样式。它是:


每个物理服务器一个记录;具有相当低的TTL(可能是30分钟);
每个服务使用一个CNAME;具有较高的TTL(可能是24小时);指向上述服务器名称。
作为上述规则的唯一代表,域根是A记录,指向Web服务器/ Web负载平衡器。 (@必须是A记录。)

我发现此设置很好用。它可以减少CNAMES的额外DNS查找。而且如果服务器崩溃,我仍然可以快速更改公用DNS。

这是BIND语法的一个(经过改进的)示例:


评论


谢谢您,最后,我对CNAME提出了合理而简洁的意见。

–泰勒
2012年8月12日下午4:08

@Jesper Mortensen:您能否举一个小例子来更新答案,特别是当您说“作为上述规则的唯一代表,域名根是A记录”时,我还是不明白您的第三点。第一点说,您为每个物理层服务器使用一个A记录。 (顺便说一句,链接消失了)

– Marco Demaio
13年2月21日在20:07

@Marco Demaio:关于“域根A记录”:像company.com这样的二级域是区域顶点。它需要一个SOA记录。因此,它必须是A记录而不是CNAME-请参阅serverfault.com/questions/170194/…

– Jesper M
13年2月21日在21:01

@不需要具有A记录;而是禁止使用CNAME。

–迈克尔·汉普顿
13年5月11日16:00

只是想补充一点,如果您的服务器也支持IPv6地址,则CNAME特别有用,因为每个服务器至少需要两个条目(每个记录一个A和AAAA),因此将CNAME用于子域在这种情况下要简单得多。如果您对TTL使用Jesper的建议(或者您的DNS提供商具有良好的自动处理能力),那么应该没有实际的性能损失。

– Haravikk
16年1月20日在11:49

#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


评论


我知道在这个问题中他们说邮件在这里不是问题,但让我们假设您还使用邮件如何处理MX记录?谢谢!

– Marco Demaio
13年2月21日在19:59

MX记录也将指向服务器名称。在MX server1中,为方便起见,我还建议您设置imap或pop和smtp CNAME,还可能要设置邮件,因为许多电子邮件程序都猜到了这一点。设置正确的SRV记录也是一个好主意,但是由于这是一个相对基本的问题,因此对于简单的配置,SRV记录可能会有点过多。

–克里斯S
13年2月21日在20:07



快速评论,MXrecord一定不能是CNAME,请参阅serverfault.com/a/232243/2874,它在实践中可能很好用-但最好不要这样做。

– Jesper M
13年2月21日在22:45



如果您将MX或SRV记录指向CNAME,则BIND将拒绝加载区域...我可能应该已经清楚地表明MX记录需要指向A记录。谢谢。

–克里斯S
13年2月22日在0:40

@ChrisS,如何编辑答案并清楚提到MX记录不能指向CNAME条目这一事实呢?

– Alexis Wilke
16年8月30日在20:55