如果某個ip:port 上只設置了一個虛擬主機,那麼NameVirtualHost ip:port 可以不寫,因為從這個ip:port的訪問不需要做任何選擇;如上例中192.168.1.197只對應於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端口。