一、基於主機名的虛擬主機
網絡環境:
1. 瀏覽器訪問基於主機名的虛擬主機時,訪問URL必須採用主機名,不能使用IP地址
2.整個網絡系統中必須建立主機名與IP地址的映射關係
2.1使用本地 Hosts 文件建立主機名與IP的映射關係(C:\Windows\System32\drivers\etc\Hosts)
127.0.0.1 www.andgoo.cn
127.0.0.1 www.pds.cn
2.2 使用DNS (要錢的)
在設置好Hosts 文件後使用命令行ping localhost 和www.pds.cn 都能ping 通
創建兩個虛擬主機的虛擬目錄結構如下:
F:\web
|———+ VM1
|—————+ROOT
|————————+WEB-INF
|————————+index.html
|———+ VM2
|—————+ROOT
|————————+WEB-INF
|————————+index.html
修改 server.xml 文件
添加以下代碼直 server.xml 文件的<Engine> 元素中
<Host name="www.andgoo.cn" appBase="F:\web\VM1"
unpackWARs="true" autoDeploy="true" />
<Host name="www.pds.cn" appBase="F:\web\VM2"
unpackWARs="true" autoDeploy="true" />
測試:
1. 重啓Tomcat
2. 瀏覽器測試:
URL:http://www.andgoo.cn:8080/index.html
二、基於端口號的虛擬主機
配置原理:
1. 一個<Connector> 元素用於配置一個對外的連接器,對於Web服務器的每一個監聽端口號,都要配置一個獨立的<Context>元素
2. 一個<Connector> 元素對應的連接器必須有一個<Engine> 元素關聯
3. 將一個或多個<Context> 元素與<Engine> 元素關聯的方式:將<Context> 元素與<Engine> 元素嵌套在同一個<Service> 元素中
配置方法:
在 server.xml 文件 的 <Server> 元素裏面添加另一個 <Services> 元素
<Service name="secend-serv">
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="www.andgoo.cn">
<Host name="www.andgoo.cn" appBase="F:\web\VM1"
unpackWARs="true" autoDeploy="true" />
<Host name="www.pds.cn" appBase="F:\web\VM2"
unpackWARs="true" autoDeploy="true" />
</Engine>
</Service>
注意:
1. <Service> 元素的 name 屬性名稱必須與原 <Service> 名稱不同,因此修改爲:secend-serv
2. <Engine>元素的 port 屬性修改爲 80(或者其他你想要的不被佔用的端口)
3. <Engine>元素的 defaultHost 屬性修改爲所包含的一個 <Host> 屬性的 name 屬性值,我選用 www.andgoo.cn
4. 此部分我沒有測試成功,正在嘗試中……
三、基於IP地址的虛擬主機
1. HTTP 1.0 不支持Host 字段,在站點統一使用80 端口時,人嗎只能採用不同的IP地址來建立虛擬主機
缺點:每個虛擬主機佔用一個IP,IP消耗嚴重
2. HTTP 1.1 可以使用不同的主機名建立多個WEB站點,所以提供商一般不再建立基於IP地址的虛擬主機服務
3. Tomcat 不提供基於IP地址的虛擬主機方式
張孝祥老師的測試方式如下(我用下面方法無法測試,不知道爲什麼):
1. CMD 命令行下運行:telnet localhost 8080
2. Ctrl + ] , 然後回車
3. GET /test.html HTTP/1.1
Host:主機名
說明:主機名若不寫,默認爲localhost