首先,某个ip:port 上只设置一个虚拟主机时,NameVirtualHost ip:port 可以不写,因为从这个ip:port的访问不需要做任何选择,例如:192.168.1.123只对应于www.a.com,所以不用指定 NameVirtualHost。
其次,某个ip:port 上设置多个虚拟主机时,则须使用指令NameVirtualHost ip:port ,否则从该ip:port的访问只访问第一个该ip:port 的虚拟主机(因为它优先,apache启动时会提示的);如上例中192.168.1.196对应www.b.com 和www.c.com,指定NameVirtualHost为NameVirtualHost 192.168.1.196:80。如果使用了指令NameVirtualHost ip:port ,却没有为该ip:port定义任何虚拟主机,好像不会出现访问到错误的虚拟主机的问题(因为谁也不知道你想干什么,不过apache还是会提示你: [warn] NameVirtualHost ip:port has no VirtualHosts);
如果VirtualHost 指定的虚拟主机没有匹配一个NameVirtualHost 指令,那么该虚拟主机不会被用到(除非他是第一个虚拟主机),这相当于没有NameVirtualHost 指令,即:如果有多个虚拟主机,一定要有NameVirtualHost 指令。
注意
1.NameVirtualHost 指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost可以定义多个。
2.虚拟主机混用可以这样理解:一行NameVirtualHost指令定义的所有虚拟主机为一组;该组与一个基于IP的虚拟主机平级。即把一行NameVirtualHost定义的整个组看作是一个基于IP的虚拟主机。
3.虚拟主机指定的端口必须是Listen定义的。如果虚拟主机没有指定端口,则认为是80端口。
作者: Sjolzy