题 在使用CNAME在Apache中设置别名时实际请求了什么?


我有很多子域设置到我的开发机器,如下所示。

  • test1.example.com => 192.168.0.7
  • test2.example.com => 192.168.0.7
  • ...(大约30个这样的域名)

我的开发服务器上有很多站点,Apache可以根据域名处理这些站点。

但是,我对设置固定IP感觉很糟糕。所以我想使用这样的别名:

  • default.example.com => 192.168.0.7
  • test1.example.com =>(CNAME)default.example.com
  • test2.example.com =>(CNAME)default.example.com

这里的优点是当dev服务器的IP被更改时,我只需要更改一个而不是多个。

如果我要求 test1.example.com 从Apache服务器,它是否采取它 test1.example.com 要么 default.example.com


7
2018-06-02 00:39




确保通过在末尾放置最后一个点(。)来完全限定CNAME。 default.mydomain.com. - Keith
一个有时很重要但主要是通过电子邮件发送的问题是反向查找(来自IP地址)将获得规范名称。因此正向和反向名称将不匹配。 - Keith
@Keith,反向查找将得到反向条目。反向查找不使用转发条目来确定要返回的内容。 - Chris S
@chris,是的,这是真的。但它通常设置为规范名称。 - Keith
@Keith,为什么会这样?它通常设置为hostmaster设置的任何内容。 - Chris S


答案:


这通常是一个好主意,因为您指出您现在只需要在一个地方更改IP。

客户端将查找test1,指向默认值,然后获取IP。然后它将连接到Apache并告诉Apache它需要test1站点(它不会告诉服务器它是如何找到服务器的,只是原始请求是什么)。


10
2018-06-02 00:48





您已经确定了CNAME记录的一个关键优势。

就apache而言,HTTP头主机字段将保留输入客户端的任何内容,并且CNAME将不起作用。

CNAME的一个可能缺点是查找具有CNAME条目的记录将需要两个查询,首先获取CNAME,第二个获取A记录。这可能不是什么大问题,但值得一提。

最后,请注意“链接CNAME”,即为CNAME创建CNAME。虽然RFC允许,但不鼓励使用。


3
2018-06-02 03:37



查找CNAME不会 一定 需要两个查询。如果DNS服务器支持递归查询(大部分都是),它将代表客户端解析链;如果它拥有整个链,则整个请求将花费与查找A记录相同的时间。 - Tom Shaw


回答你的上一个问题:如果你正在使用 NameVirtualHost Apache中的指令,并为每个CNAMEed条目设置vhost,您将获得该vhost定义的唯一页面。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName test1.example.com
    DocumentRoot /var/www/test1
</VirtualHost>

一般来说,根据我的经验,我建议您不依赖于任何实时内容的默认配置,而是为每个名称设置一个vhost(如果需要,可以使用多个部分)。总有例外,但这通常更容易调试,因为您托管的每个名称都通过在配置中明确定义来解决。


1
2018-06-02 12:33