Geo*_*Geo 112 dns networking cname rfc
我们为客户托管了许多Web应用程序.很明显,他们希望使用自己的域来引用这些应用程序,通常他们希望任何键入http://www.customer1.example
或http://customer1.example
转到其Web应用程序的用户.
我们面临的情况是,我们需要具备在不久的将来更改IP地址的灵活性.我们不希望依赖客户对其域名进行A记录更改.所以我们认为使用CNAME
记录会起作用,但是我们发现CNAME
记录不适用于根域.
基本上:
customer1.example IN CNAME customer1.mycompanydomain.example //this is invalid as the RFC
www.customer1.example IN CNAME customer1.mycompanydomain.example //this is valid and will work
Run Code Online (Sandbox Code Playgroud)
我们希望能够更改IP地址customer1.mycompanydomain.example
或A
记录,我们的客户将遵循我们控制的记录.
在我们的DNS中它看起来像:
customer1.mycompanydomain.example IN A 192.0.2.1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
小智 59
这个问题经常出现的原因是因为,正如你所提到的,在某个地方某个人被认为是重要的人写道,RFC声明在他们面前没有子域名的域名是无效的.但是,如果您仔细阅读RFC,您会发现这并不是它所说的.实际上,RFC 1912声明:
不要过分使用CNAME.重命名主机时使用它们,但计划摆脱它们(并通知您的用户).
某些DNS主机提供了一种使用自定义记录类型在区域顶点(根域级别,裸域名)获取类似CNAME功能的方法.这些记录包括,例如:
对于每个提供商,设置类似:将您的顶点域的ALIAS或ANAME条目指向example.domain.com,就像使用CNAME记录一样.根据DNS提供程序,空或@Name值标识区域顶点.
ALIAS或ANAME或@ example.domain.com.
如果您的DNS提供程序不支持这样的记录类型,并且您无法切换到那样做,那么您将需要使用子域重定向,这并不难,具体取决于需要执行此操作的协议或服务器软件.
我强烈不同意只有"业余管理员"或此类想法才能完成的声明.这很简单"名称及其服务需要做什么?" 处理,然后调整您的DNS配置以满足这些愿望; 如果您的主要服务是网络和电子邮件,我没有看到任何有效的原因,为什么放弃CNAME为好 - 这将是有问题的.毕竟,谁更喜欢@ subdomain.domain.org而不是@ domain.org?如果您已经设置了协议本身,谁需要"www"?假设使用根域名无效是不合逻辑的.
小智 50
CNAME的根记录在技术上不是针对RFC的,但确实有限制意味着它是一种不推荐的做法.
通常,您的根记录将有多个条目.比方说,3为您的名称服务器,然后一个为IP地址.
每个RFC:
如果节点上存在CNAME RR,则不应存在其他数据;
并且根据IETF的"常见DNS操作和配置错误"文档:
这通常是由经验不足的管理员尝试的,这是允许您的域名也是主机的明显方式.但是,像BIND这样的DNS服务器将看到CNAME并拒绝为该名称添加任何其他资源.由于不允许其他记录与CNAME共存,因此将忽略NS条目.因此,podunk.xx域中的所有主机也会被忽略!
参考文献:
Geo*_*Geo -9
感谢 sipwiz 和 MrEvil。我们开发了一个 PHP 脚本,它将解析用户输入的 URL 并将其粘贴www
到其顶部。(例如,如果客户输入kiragiannis.com,那么它将重定向到www.kiragiannis.com)。因此,我们的客户指向他们的根(例如,customer1.com
记录A
我们的网络重定向器所在的位置),然后指向我们管理的www
CNAME
真实记录。A
如果您对未来的我们感兴趣,请在代码下方。
<?php
$url = strtolower($_SERVER["HTTP_HOST"]);
if(strpos($url, "//") !== false) { // remove http://
$url = substr($url, strpos($url, "//") + 2);
}
$urlPagePath = "";
if(strpos($url, "/") !== false) { // store post-domain page path to append later
$urlPagePath = substr($url, strpos($url, "/"));
$url = substr($url, 0, strpos($url,"/"));
}
$urlLast = substr($url, strrpos($url, "."));
$url = substr($url, 0, strrpos($url, "."));
if(strpos($url, ".") !== false) { // get rid of subdomain(s)
$url = substr($url, strrpos($url, ".") + 1);
}
$url = "http://www." . $url . $urlLast . $urlPagePath;
header( "Location:{$url}");
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
128877 次 |
最近记录: |