使用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被改变时,我只需要改变一个而不是多个。

如果我从Apache服务器请求test1.example.com ,是否将其作为test1.example.comdefault.example.com

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

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

您已经确定了CNAMElogging的一个关键优势。

就apache而言,HTTP header Host字段将保留任何input到客户端的内容,并且CNAME将不起作用。

CNAME的一个可能的缺点是查找具有CNAME条目的logging将需要两个查询,第一个是获取CNAME,第二个是获取Alogging。 这可能不是一个大问题,但值得一提。

最后,小心“链接CNAME”,即将CNAME创build为CNAME。 虽然在RFC中是允许的,但它是不鼓励的。

要回答您的最后一个问题:如果您在Apache中使用NameVirtualHost指令,并且为每个CNAMEed条目设置了一个虚拟主机,则您将获得由该虚拟主机定义的唯一页面。

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

一般来说,根据我的经验,我build议您不要依赖任何实时内容的默认configuration,而是为每个名称设置一个虚拟主机(如果需要,可以使用serveraliases)。 总是有例外,但这通常更容易debugging,因为您所托pipe的每个名称都是通过在configuration中明确定义的。