我有一台服务器(Ubuntu + Apache),我们在那里托pipe一个应用程序,客户可以在其中创build自己的子域 – 即基本上通配的子域。
我们有一个客户想要把他们自己的域名(www.client.com)放在我们的服务器上唯一的子域名(client.app.com)上。 这应该是透明的,这样当有人在www.client.com上input时,url仍然会显示www.client.com,但是在client.app.com上一切都是透明的。
在他的DNS中,他应该创build一个指向我们的IP地址的Alogging,还是指向client.app.com的cname?
在这两种情况下,我们需要创build的虚拟主机有什么不同?
在他的DNS中,他应该创build一个指向我们的IP地址的Alogging,还是指向client.app.com的cname?
他应该使用指向client.app.com的CNAME。 这样做有很多原因,但最好的原因可能是因为如果服务器的IP地址发生变化,意味着更less的更改:只有client.app.com的条目需要更新,而其他所有CNAMEd会自动跟随。
其他原因包括无法与MXlogging具有相同名称的logging,如提到的其他海报之一; 以及一个主机应该只有一个“真实姓名”(Alogging)的一般原则,而指向同一主机的其他logging应该是别名(CNAME)。 当然,当你有一个指向多个IP和多个主机的Alogging时,这个理念就会崩溃(但是,对于客户来说,使用CNAMES是另一个好的理由:如果你的服务变得stream行,你需要通过负载均衡其他服务于同一事物的主机,你希望你的客户从中受益,而不必改变任何东西)。 (当然,负载均衡和扩展的方法有很多种,您可以轻松select一个与DNS无关的方法,但这取决于您的实现。)
在这两种情况下,我们需要创build的虚拟主机有什么不同?
无论您select哪种DNS方法,都需要确保将apacheconfiguration为接受其他名称。
所以当有人在www.client.com上input时,url仍然会显示www.client.com,但是一切都在client.app.com上透明地工作
当然,你要通过自己的apache文档浏览来确认下面的内容,但我可以想到两种方法来做到这一点:
UseCanonicalName Off在每个VirtualHost条目内UseCanonicalName Off ServerAlias :
UseCanonicalName Off <VirtualHost *:80> ServerName www.client.com ServerAlias client.app.com DocumentRoot /www/client </VirtualHost>
使用多个ServerName和VirtualHost条目:
<VirtualHost *:80> ServerName www.client.com DocumentRoot /www/client </VirtualHost> <VirtualHost *:80> ServerName client.app.com DocumentRoot /www/client </VirtualHost>
请记住,无论使用哪种方法,您都可能需要确保html和任何关联的脚本正确地为所需的行为生成URL。
这里也有很多很好的例子和有趣的讨论:关于主题的http://httpd.apache.org/docs/2.4/vhosts/mass.html 。