许多域名/网站托管在同一台服务器上,使用 CNAME 替代方案是否可以避免在 DNS 中写入相同的 IP?

许多域名/网站托管在同一台服务器上,使用 CNAME 替代方案是否可以避免在 DNS 中写入相同的 IP?

我有很多网站(每个网站都有自己的域名),都在同一个 cPanel 托管服务器上(假设服务器 IP 是1.1.1.1,服务器主域名是myserver.com

所有这些域名都使用第三方 DNS(不是 cPanel 托管的),我将每个域的 DNS 设置为指向服务器 IP。每个域 DNS 当前设置的示例:

domainx.com -> A -> 1.1.1.1
domainx.com -> MX -> mail.domainx.com
mail.domainx.com -> A -> 1.1.1.1
www.domainx.com -> CNAME -> domainx.com
ftp.domainx.com -> CNAME -> domainx.com

这种情况迫使我为每个域名重复数百次服务器 IP 1.1.1.1。如果服务器 IP 发生变化,我将不得不检查每个域名的 DNS,用新 IP 更新记录。

所以我想为什么不使用 CNAME 来避免到处重写服务器 IP?!我可以像下面这样设置每个域的 DNS:

domainx.com -> CNAME -> myserver.com
domainx.com -> MX -> mail.myserver.com
mail.domainx.com -> CNAME -> myserver.com
www.domainx.com -> CNAME -> myserver.com
ftp.domainx.com -> CNAME -> myserver.com

但我读到那domainx.com -> CNAME -> myserver.com是邪恶的,明白了吗

但是我有什么其他方法可以避免到处重写服务器 IP?

答案1

但我读到 domainx.com -> CNAME -> myserver.com 是邪恶的

CNAME 并不邪恶。但是,将 CNAME 用于二级域名会破坏这些域名的 DNS。您不能在与 CNAME 记录相同的级别添加 MX、TXT 或任何其他记录。从rfc1912

CNAME 记录不允许与任何其他数据共存。换句话说
,如果 suzy.podunk.xx 是 sue.podunk.xx 的别名,您
就不能同时拥有 suzy.podunk.edu 的 MX 记录、A 记录,甚至
TXT 记录。尤其是不要尝试将 CNAME 和 NS
记录合并在一起

从技术上讲,这可能有效,但将 CNAMES 与其他记录混合可能会混淆其他 DNS 服务器,这将导致奇怪的故障并带来管理上的麻烦。

答案2

尽管域名的 CNAME 很邪恶,但存在一个鲜为人知的 DNAME,它可以做几乎完全符合您的要求(并且它的目的就是如此)。它还允许覆盖子域中的某些条目(例如 spf 文本记录等...,如果您需要的话) - 请参阅此问题我的回答就是一个例子。

答案3

为什么不在 BIND 中使用单个区域文件?

您创建一个名为 的区域文件virtual_hosts,并将 A 记录、MX 记录等放入其中。然后在文件中将named.conf每个“简单”域指向同一个区域文件。

zone "domainx.com" IN {   
    type master;   
    file "virtual_hosts";   
    allow-update { none; }; 
};

zone "domainy.com" IN {   
    type master;   
    file "virtual_hosts";   
    allow-update { none; }; 
};

zone "domainz.com" IN {   
    type master;   
    file "virtual_hosts";   
    allow-update { none; }; 
};

答案4

对指向同一 IP 的记录使用通配符 (*)

例如 test.com 就是您的域名:

$ORIGIN test.com.
*           A   1.1.1.1

在这种情况下,每个子域名都会有 A 记录 1.1.1.1,包括 www

相关内容