一、網(wǎng)站
系統(tǒng)
的組成
只要在一臺計(jì)算機(jī)上安裝了
WEB
服務(wù)器
軟件
,從
功能
上講,這臺計(jì)算機(jī)就可以稱為
WEB
服務(wù)器。一個(gè)網(wǎng)站的規(guī)模可大可小,功能可多可少,最簡單的網(wǎng)站只需要一臺
Web
服務(wù)器即可對外提供網(wǎng)頁瀏覽服務(wù)。復(fù)雜的網(wǎng)站包括多臺
WEB
服務(wù)器組成的群集系統(tǒng)、負(fù)載均衡設(shè)備、具有緩存功能的代理服務(wù)器(可以有多級,甚至包括放置在服務(wù)器端的緩存系統(tǒng))、
數(shù)據(jù)庫
系統(tǒng)等,如圖
2.2
所示。
WEB 瀏覽器與 WEB 服務(wù)器建立連接后,除了將請求 URL 中的資源路徑發(fā)送給 WEB 服務(wù)器外,還會將 URL 中的主機(jī)名部分作為 HTTP 請求消息的 Host 頭發(fā)送給 WEB 服務(wù)器。例如,在瀏覽器地址欄中輸入 http://www.it315.org ,瀏覽器發(fā)送給 www.it315.org 主機(jī)上的 WEB 服務(wù)器的請求消息內(nèi)容如下:
GET / HTTP/1.1< 回車 >
Host: www.it315.org < 回車 >
< 回車 >
WEB 服務(wù)器接收到瀏覽器的訪問請求消息后,根據(jù) Host 頭字段中所設(shè)置的主機(jī)名,就知道該選擇哪個(gè) WEB 站點(diǎn)來進(jìn)行響應(yīng),因此,可以使用不同的主機(jī)名來作為區(qū)分同一個(gè) WEB 服務(wù)器上的不同站點(diǎn)的標(biāo)識信息。
Tomcat 的 Server .xml 配置 文件 中有一個(gè) <Host> 元素,一個(gè) <Host> 元素用于建立一個(gè) WEB 站點(diǎn),使用多個(gè) <Host> 元素則可以建立多個(gè) WEB 站點(diǎn)。 <Host> 元素的父級元素為 <Engine> 元素,嵌套在同一個(gè) <Engine> 元素中的多個(gè) <Host> 元素的 name 屬性不能相同, <Host> 元素的 name 屬性指定 WEB 站點(diǎn)所對應(yīng)的主機(jī)名稱。 Tomcat 的 Server.xml 配置文件中初始設(shè)置的 <Host> 元素內(nèi)容如下:
<Host appBase="webapps" …>
…
</Host>
<Host> 元素中的 appBase 屬性指定了一個(gè)路徑,該路徑將作為嵌套在它里面的 <Context> 元素的 docBase 屬性中設(shè)置的相對路徑的基準(zhǔn)路徑。
當(dāng) Tomcat 接收到訪問請求時(shí),將比較請求消息中的 Host 頭字段的值與 <Host> 元素的 name 屬性值,并以匹配的 <Host> 元素所創(chuàng)建的 WEB 站點(diǎn)來響應(yīng)。如果 Server.xml 文件中沒有與請求消息的 Host 頭字段匹配的 <Host> 元素, Tomcat 將以默認(rèn)的 WEB 站點(diǎn)來響應(yīng)。只要 <Engine> 元素的 defaultHost 屬性設(shè)置為嵌套在它里面的某個(gè) <Host> 元素的 name 屬性值,該 <Host> 元素所創(chuàng)建的 WEB 站點(diǎn)就成了該引擎的默認(rèn) WEB 站點(diǎn)。例如, Tomcat 的 Server.xml 文件中的 <Engine> 元素的默認(rèn)設(shè)置如下:
<Engine defaultHost="localhost" debug="0">
…
<Host name="localhost" appBase="webapps" …>
…
</Host>
…
</Engine>
上面的這段配置信息說明,該引擎的默認(rèn) WEB 站點(diǎn)為嵌套在 <Engine> 元素中的 name 屬性為“ localhost ”的 <Host> 元素所創(chuàng)建的 WEB 站點(diǎn)。
在同一臺計(jì)算機(jī)上建立了多個(gè)基于主機(jī)名的虛擬主機(jī)后, WEB 瀏覽器要訪問其中的某個(gè)虛擬主機(jī)的資源時(shí),在訪問 URL 中必須采用主機(jī)名,而不能采用 IP 地址。這是因?yàn)? WEB 瀏覽器要將 URL 中的主機(jī)名部分作為 HTTP 請求消息的 Host 頭發(fā)送給 WEB 服務(wù)器,如果 URL 中的主機(jī)名部分使用的是 IP 地址,那么,瀏覽器發(fā)出的請求消息中的 Host 頭字段的值就是這個(gè) IP 地址,而在同一臺計(jì)算機(jī)上建立的多個(gè)基于主機(jī)名的虛擬主機(jī)共享同一個(gè) IP 地址,在 Host 頭字段使用 IP 地址根本就無法區(qū)分不同的站點(diǎn)。
即使在 URL 中指定的是主機(jī)名時(shí), WEB 瀏覽器還是要先獲得該主機(jī)名所對應(yīng)的 IP 地址,然后再使用這個(gè) IP 去連接 WEB 服務(wù)器。所以,在建立基于主機(jī)名的虛擬主機(jī)時(shí),除了要在 Tomcat 的 server.xml 文件中進(jìn)行設(shè)置外,還需要在整個(gè)網(wǎng)絡(luò)系統(tǒng)中建立主機(jī)名與 IP 地址的映射關(guān)系,即必須將主機(jī)名添加到名稱解析系統(tǒng),以便 WEB 瀏覽器能夠從名稱解析系統(tǒng)中查詢出主機(jī)名所對應(yīng)的 IP 地址。建立主機(jī)名與 IP 地址的映射關(guān)系的慣用方式有兩種:一是使用客戶機(jī)本地的 Hosts 文件,二是使用 DNS(Domain Name System ,域名系統(tǒng) ) 服務(wù)器。 Hosts 文件和 DNS 的作用都是允許用戶使用“友好”的、文本格式的主機(jī)名稱,而不是數(shù)字格式的 IP 地址來訪問網(wǎng)絡(luò)中的計(jì)算機(jī)。 Hosts 文件可用于小型的 Intranet (企業(yè)內(nèi)部網(wǎng)),網(wǎng)絡(luò)中的所有計(jì)算機(jī)上都需要使用 Hosts 文件。 DNS 通常用于大型的網(wǎng)絡(luò),特別是 Internet 上對外提供服務(wù)的計(jì)算機(jī)都是通過 DNS 來建立其主機(jī)名與 IP 地址的映射關(guān)系。客戶機(jī)首先在本地的 Hosts 文件中查找主機(jī)名稱所映射的 IP 地址,如果沒有找到,再去查詢 DNS 服務(wù)器。為了簡單起見,這里僅介紹一下 Hosts 文件。對于 Windows 2000 系統(tǒng), Hosts 文件位于操作系統(tǒng)根目錄(取決操作系統(tǒng)所在的分區(qū),通常是 c:\winnt )下的 System32\Drivers\Etc 子目錄中,默認(rèn)情況下,該文件中有如下一行內(nèi)容:
127.0.0.1
localhost
這行文本的作用就是將 IP 地址( 127.0.0.1 )映射成主機(jī)名( localhost ),這也就是在 IE 瀏覽器地址欄中可以使用 localhost 訪問本地 WEB 服務(wù)器的原因。如果要增加更多的主機(jī)名與 IP 地址的映射,可以在 Hosts 文件中增加更多的行,然后參照上面這行內(nèi)容的格式在每行中填寫 IP 地址和相應(yīng)的主機(jī)名。
:動手體驗(yàn): 使用 Tomcat 建立基于主機(jī)名的虛擬主機(jī)
( 1 )用 UltraEdit 打開 <Tomcat 主目錄 >/conf 目錄下的 Server.xml 文件,使用“查找”菜單查找內(nèi)容為“ </Host> ”的行,緊接該行下面增加一對 <Host></Host> 標(biāo)簽。參照前面的 <Host> 標(biāo)簽的屬性設(shè)置情況,設(shè)置新增的 <Host> 標(biāo)簽的屬性,并在它里面嵌套一個(gè)設(shè)置該 WEB 站點(diǎn)根目錄的 <Context> 元素,最終的內(nèi)容如下:
<Host name="site1" debug="0" appBase="d:\VirtualHost1">
<Context path="" docBase="." debug="0"/>
</Host>
這樣,將創(chuàng)建一個(gè)新的 WEB 站點(diǎn)。上面的 <Context> 元素的 docBase 屬性值被設(shè)置為一個(gè)點(diǎn)( . ),即表示使用 <Host> 元素的 appBase 屬性中所設(shè)置的路徑作為這個(gè) <Context> 所映射的目錄。
( 2 )在上面新增的 <Host></Host> 標(biāo)簽對下面再增加一對 <Host></Host> 標(biāo)簽,并將它設(shè)置為如下形式:
<Host name="site2" debug="0" appBase="d:\VirtualHost2">
<Context path="" docBase="." debug="0"/>
</Host>
這又創(chuàng)建了一個(gè)新的 WEB 站點(diǎn),該站點(diǎn)的主機(jī)名稱為 site2 ,根目錄對應(yīng)的本地文件系統(tǒng)目錄為 d:\VirtualHost2 。
( 3 )在 d: 盤下創(chuàng)建名稱為 VirtualHost1 和 VirtualHost2 兩個(gè)目錄,并在這兩個(gè)目錄中分別創(chuàng)建一個(gè)名為 test.html 的文件,在 d:\VirtualHost1\test.html 文件中寫入如下一行內(nèi)容:
這是 d:\VirtualHost1 目錄中的test.html文件
在 d:\VirtualHost2\test.html 文件中寫入如下一行內(nèi)容:
這是 d:\VirtualHost2 目錄中的test.html文件
( 4 )保存修改后的 Server.xml 文件,重新啟動 Tomcat WEB 服務(wù)器程序。打開一個(gè)新的 命令 行窗口中,并在這個(gè)命令行窗口中執(zhí)行如下命令:
telnet 127.0.0.1 8080
接著在連接成功的 telnet 程序命令窗口中,輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >site1< 回車 >
< 回車 >
這時(shí)在 telnet 程序窗口中可以看到, WEB 服務(wù)器返回內(nèi)容的正文部分為 d:\VirtualHost1\test.html 文件中的內(nèi)容。接著 WEB 服務(wù)器返回內(nèi)容的下邊,輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >site2< 回車 >
< 回車 >
在 telnet 程序窗口中又可以看到, WEB 服務(wù)器這次返回內(nèi)容的正文部分為 d:\VirtualHost2\test.html 文件中的內(nèi)容。接著 WEB 服務(wù)器返回內(nèi)容的下邊,輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >< 回車 >
< 回車 >
在 telnet 程序窗口中又可以看到, WEB 服務(wù)器這次返回內(nèi)容的正文部分為 d:\test\test.html 文件中的內(nèi)容。接著 WEB 服務(wù)器返回內(nèi)容的下邊,再次輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >xxx< 回車 >
< 回車 >
在 telnet 程序窗口中又可以看到, WEB 服務(wù)器這次返回內(nèi)容的正文部分仍然為 d:\test\test.html 文件中的內(nèi)容。
上面的整個(gè)交互過程如圖 2.34 所示, Tomcat 根據(jù)第 1 次和第 2 次請求中所指定 Host 頭的值,查找 Server.xml 文件中與之相匹配的 <Host> 元素的 name 屬性值,并以匹配的 <Host> 元素所設(shè)置的 WEB 站點(diǎn)來響應(yīng);在第 3 次和第 4 次請求中所指定 Host 頭的值,在 Server.xml 文件中沒有與之對應(yīng)的 <Host> 元素的 name 屬性值, Tomcat 將以默認(rèn)的 WEB 站點(diǎn)來響應(yīng)。
127.0.0.1
localhost
緊接這行文本的下面,用它復(fù)制出兩行文本,并將這兩行文本中的 localhost 分別修改成 site1 和 site2 ,這樣,就使用 Hosts 文件為當(dāng)前計(jì)算機(jī)設(shè)置了多個(gè)主機(jī)名。如果要用 site1 和 site2 這個(gè)兩主機(jī)名訪問其他計(jì)算機(jī)上的 WEB 站點(diǎn),則應(yīng)將 127.0.0.1 修改成其他計(jì)算機(jī)的實(shí)際 IP 地址。保存 Hosts 文件后,在命令行窗口中執(zhí)行“ ping site1 ”和“ ping site2 ”命令,查看該主機(jī)名是否被正確解析到了相應(yīng)的 IP 地址上。建立 site1 和 site2 與計(jì)算機(jī) IP 地址的映射后,在 IE 瀏覽器地址欄中輸入 http://localhost:8080/test.html 、 http://site1:8080/test.html 和 http://site2:8080/test.html ,可以看到瀏覽器將顯示出各自站點(diǎn)中的 test.html 網(wǎng)頁文件的內(nèi)容。
可見,使用主機(jī)名的方式在同一臺 WEB 服務(wù)器上創(chuàng)建多個(gè)虛擬主機(jī)后,在 WEB 瀏覽器中使用主機(jī)名訪問 Web 服務(wù)器時(shí), Web 服務(wù)器將選擇與該主機(jī)名關(guān)聯(lián)的 WEB 站點(diǎn)進(jìn)行響應(yīng)。通過這種方式,多個(gè) WEB 站點(diǎn)可以共享同一個(gè) IP 地址和相同的端口號,唯一不足的就是 WEB 瀏覽不能通過 IP 地址去訪問這些 WEB 站點(diǎn)。基于主機(jī)名的虛擬主機(jī)是目前 Internet 上的大多數(shù)虛擬主機(jī)業(yè)務(wù)提供商所通常采用的方式。只要找出幾個(gè)小型公司或個(gè)人的網(wǎng)站,如果在 WEB 瀏覽器地址欄中輸入“ http:// 主機(jī)名”可以訪問到該 WEB 站點(diǎn),接著在命令行窗口中執(zhí)行“ ping 主機(jī)名”,查看到該域名對應(yīng)的 IP 地址,然后在 WEB 瀏覽器地址欄中輸入“ http://IP 地址”時(shí),卻無法訪問這個(gè) WEB 站點(diǎn)了,那么,這個(gè) WEB 站點(diǎn)就是一個(gè)基于主機(jī)名的虛擬主機(jī),它與其他一些 WEB 站點(diǎn)共享一臺 WEB 服務(wù)器,而不是自己獨(dú)享一臺 WEB 服務(wù)器。
注意:當(dāng)使用安全套接字層 (SSL) 時(shí),不能使用主機(jī)頭字段來實(shí)現(xiàn)虛擬主機(jī),這是因?yàn)槭褂? SSL 的 HTTP 請求有加密保護(hù)。主機(jī)頭字段是加密內(nèi)容的一部分,不能被解釋和 路由 到正確的站點(diǎn)。
圖
2.2
圖
2.3
WEB 瀏覽器與 WEB 服務(wù)器建立連接后,除了將請求 URL 中的資源路徑發(fā)送給 WEB 服務(wù)器外,還會將 URL 中的主機(jī)名部分作為 HTTP 請求消息的 Host 頭發(fā)送給 WEB 服務(wù)器。例如,在瀏覽器地址欄中輸入 http://www.it315.org ,瀏覽器發(fā)送給 www.it315.org 主機(jī)上的 WEB 服務(wù)器的請求消息內(nèi)容如下:
GET / HTTP/1.1< 回車 >
Host: www.it315.org < 回車 >
< 回車 >
WEB 服務(wù)器接收到瀏覽器的訪問請求消息后,根據(jù) Host 頭字段中所設(shè)置的主機(jī)名,就知道該選擇哪個(gè) WEB 站點(diǎn)來進(jìn)行響應(yīng),因此,可以使用不同的主機(jī)名來作為區(qū)分同一個(gè) WEB 服務(wù)器上的不同站點(diǎn)的標(biāo)識信息。
Tomcat 的 Server .xml 配置 文件 中有一個(gè) <Host> 元素,一個(gè) <Host> 元素用于建立一個(gè) WEB 站點(diǎn),使用多個(gè) <Host> 元素則可以建立多個(gè) WEB 站點(diǎn)。 <Host> 元素的父級元素為 <Engine> 元素,嵌套在同一個(gè) <Engine> 元素中的多個(gè) <Host> 元素的 name 屬性不能相同, <Host> 元素的 name 屬性指定 WEB 站點(diǎn)所對應(yīng)的主機(jī)名稱。 Tomcat 的 Server.xml 配置文件中初始設(shè)置的 <Host> 元素內(nèi)容如下:
<Host appBase="webapps" …>
…
</Host>
<Host> 元素中的 appBase 屬性指定了一個(gè)路徑,該路徑將作為嵌套在它里面的 <Context> 元素的 docBase 屬性中設(shè)置的相對路徑的基準(zhǔn)路徑。
當(dāng) Tomcat 接收到訪問請求時(shí),將比較請求消息中的 Host 頭字段的值與 <Host> 元素的 name 屬性值,并以匹配的 <Host> 元素所創(chuàng)建的 WEB 站點(diǎn)來響應(yīng)。如果 Server.xml 文件中沒有與請求消息的 Host 頭字段匹配的 <Host> 元素, Tomcat 將以默認(rèn)的 WEB 站點(diǎn)來響應(yīng)。只要 <Engine> 元素的 defaultHost 屬性設(shè)置為嵌套在它里面的某個(gè) <Host> 元素的 name 屬性值,該 <Host> 元素所創(chuàng)建的 WEB 站點(diǎn)就成了該引擎的默認(rèn) WEB 站點(diǎn)。例如, Tomcat 的 Server.xml 文件中的 <Engine> 元素的默認(rèn)設(shè)置如下:
<Engine defaultHost="localhost" debug="0">
…
<Host name="localhost" appBase="webapps" …>
…
</Host>
…
</Engine>
上面的這段配置信息說明,該引擎的默認(rèn) WEB 站點(diǎn)為嵌套在 <Engine> 元素中的 name 屬性為“ localhost ”的 <Host> 元素所創(chuàng)建的 WEB 站點(diǎn)。
在同一臺計(jì)算機(jī)上建立了多個(gè)基于主機(jī)名的虛擬主機(jī)后, WEB 瀏覽器要訪問其中的某個(gè)虛擬主機(jī)的資源時(shí),在訪問 URL 中必須采用主機(jī)名,而不能采用 IP 地址。這是因?yàn)? WEB 瀏覽器要將 URL 中的主機(jī)名部分作為 HTTP 請求消息的 Host 頭發(fā)送給 WEB 服務(wù)器,如果 URL 中的主機(jī)名部分使用的是 IP 地址,那么,瀏覽器發(fā)出的請求消息中的 Host 頭字段的值就是這個(gè) IP 地址,而在同一臺計(jì)算機(jī)上建立的多個(gè)基于主機(jī)名的虛擬主機(jī)共享同一個(gè) IP 地址,在 Host 頭字段使用 IP 地址根本就無法區(qū)分不同的站點(diǎn)。
即使在 URL 中指定的是主機(jī)名時(shí), WEB 瀏覽器還是要先獲得該主機(jī)名所對應(yīng)的 IP 地址,然后再使用這個(gè) IP 去連接 WEB 服務(wù)器。所以,在建立基于主機(jī)名的虛擬主機(jī)時(shí),除了要在 Tomcat 的 server.xml 文件中進(jìn)行設(shè)置外,還需要在整個(gè)網(wǎng)絡(luò)系統(tǒng)中建立主機(jī)名與 IP 地址的映射關(guān)系,即必須將主機(jī)名添加到名稱解析系統(tǒng),以便 WEB 瀏覽器能夠從名稱解析系統(tǒng)中查詢出主機(jī)名所對應(yīng)的 IP 地址。建立主機(jī)名與 IP 地址的映射關(guān)系的慣用方式有兩種:一是使用客戶機(jī)本地的 Hosts 文件,二是使用 DNS(Domain Name System ,域名系統(tǒng) ) 服務(wù)器。 Hosts 文件和 DNS 的作用都是允許用戶使用“友好”的、文本格式的主機(jī)名稱,而不是數(shù)字格式的 IP 地址來訪問網(wǎng)絡(luò)中的計(jì)算機(jī)。 Hosts 文件可用于小型的 Intranet (企業(yè)內(nèi)部網(wǎng)),網(wǎng)絡(luò)中的所有計(jì)算機(jī)上都需要使用 Hosts 文件。 DNS 通常用于大型的網(wǎng)絡(luò),特別是 Internet 上對外提供服務(wù)的計(jì)算機(jī)都是通過 DNS 來建立其主機(jī)名與 IP 地址的映射關(guān)系。客戶機(jī)首先在本地的 Hosts 文件中查找主機(jī)名稱所映射的 IP 地址,如果沒有找到,再去查詢 DNS 服務(wù)器。為了簡單起見,這里僅介紹一下 Hosts 文件。對于 Windows 2000 系統(tǒng), Hosts 文件位于操作系統(tǒng)根目錄(取決操作系統(tǒng)所在的分區(qū),通常是 c:\winnt )下的 System32\Drivers\Etc 子目錄中,默認(rèn)情況下,該文件中有如下一行內(nèi)容:
127.0.0.1
localhost
這行文本的作用就是將 IP 地址( 127.0.0.1 )映射成主機(jī)名( localhost ),這也就是在 IE 瀏覽器地址欄中可以使用 localhost 訪問本地 WEB 服務(wù)器的原因。如果要增加更多的主機(jī)名與 IP 地址的映射,可以在 Hosts 文件中增加更多的行,然后參照上面這行內(nèi)容的格式在每行中填寫 IP 地址和相應(yīng)的主機(jī)名。
:動手體驗(yàn): 使用 Tomcat 建立基于主機(jī)名的虛擬主機(jī)
( 1 )用 UltraEdit 打開 <Tomcat 主目錄 >/conf 目錄下的 Server.xml 文件,使用“查找”菜單查找內(nèi)容為“ </Host> ”的行,緊接該行下面增加一對 <Host></Host> 標(biāo)簽。參照前面的 <Host> 標(biāo)簽的屬性設(shè)置情況,設(shè)置新增的 <Host> 標(biāo)簽的屬性,并在它里面嵌套一個(gè)設(shè)置該 WEB 站點(diǎn)根目錄的 <Context> 元素,最終的內(nèi)容如下:
<Host name="site1" debug="0" appBase="d:\VirtualHost1">
<Context path="" docBase="." debug="0"/>
</Host>
這樣,將創(chuàng)建一個(gè)新的 WEB 站點(diǎn)。上面的 <Context> 元素的 docBase 屬性值被設(shè)置為一個(gè)點(diǎn)( . ),即表示使用 <Host> 元素的 appBase 屬性中所設(shè)置的路徑作為這個(gè) <Context> 所映射的目錄。
( 2 )在上面新增的 <Host></Host> 標(biāo)簽對下面再增加一對 <Host></Host> 標(biāo)簽,并將它設(shè)置為如下形式:
<Host name="site2" debug="0" appBase="d:\VirtualHost2">
<Context path="" docBase="." debug="0"/>
</Host>
這又創(chuàng)建了一個(gè)新的 WEB 站點(diǎn),該站點(diǎn)的主機(jī)名稱為 site2 ,根目錄對應(yīng)的本地文件系統(tǒng)目錄為 d:\VirtualHost2 。
( 3 )在 d: 盤下創(chuàng)建名稱為 VirtualHost1 和 VirtualHost2 兩個(gè)目錄,并在這兩個(gè)目錄中分別創(chuàng)建一個(gè)名為 test.html 的文件,在 d:\VirtualHost1\test.html 文件中寫入如下一行內(nèi)容:
這是 d:\VirtualHost1 目錄中的test.html文件
在 d:\VirtualHost2\test.html 文件中寫入如下一行內(nèi)容:
這是 d:\VirtualHost2 目錄中的test.html文件
( 4 )保存修改后的 Server.xml 文件,重新啟動 Tomcat WEB 服務(wù)器程序。打開一個(gè)新的 命令 行窗口中,并在這個(gè)命令行窗口中執(zhí)行如下命令:
telnet 127.0.0.1 8080
接著在連接成功的 telnet 程序命令窗口中,輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >site1< 回車 >
< 回車 >
這時(shí)在 telnet 程序窗口中可以看到, WEB 服務(wù)器返回內(nèi)容的正文部分為 d:\VirtualHost1\test.html 文件中的內(nèi)容。接著 WEB 服務(wù)器返回內(nèi)容的下邊,輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >site2< 回車 >
< 回車 >
在 telnet 程序窗口中又可以看到, WEB 服務(wù)器這次返回內(nèi)容的正文部分為 d:\VirtualHost2\test.html 文件中的內(nèi)容。接著 WEB 服務(wù)器返回內(nèi)容的下邊,輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >< 回車 >
< 回車 >
在 telnet 程序窗口中又可以看到, WEB 服務(wù)器這次返回內(nèi)容的正文部分為 d:\test\test.html 文件中的內(nèi)容。接著 WEB 服務(wù)器返回內(nèi)容的下邊,再次輸入如下內(nèi)容:
GET /test.html HTTP/1.1< 回車 >
Host:< 空格 >xxx< 回車 >
< 回車 >
在 telnet 程序窗口中又可以看到, WEB 服務(wù)器這次返回內(nèi)容的正文部分仍然為 d:\test\test.html 文件中的內(nèi)容。
上面的整個(gè)交互過程如圖 2.34 所示, Tomcat 根據(jù)第 1 次和第 2 次請求中所指定 Host 頭的值,查找 Server.xml 文件中與之相匹配的 <Host> 元素的 name 屬性值,并以匹配的 <Host> 元素所設(shè)置的 WEB 站點(diǎn)來響應(yīng);在第 3 次和第 4 次請求中所指定 Host 頭的值,在 Server.xml 文件中沒有與之對應(yīng)的 <Host> 元素的 name 屬性值, Tomcat 將以默認(rèn)的 WEB 站點(diǎn)來響應(yīng)。
圖
2.34
127.0.0.1
localhost
緊接這行文本的下面,用它復(fù)制出兩行文本,并將這兩行文本中的 localhost 分別修改成 site1 和 site2 ,這樣,就使用 Hosts 文件為當(dāng)前計(jì)算機(jī)設(shè)置了多個(gè)主機(jī)名。如果要用 site1 和 site2 這個(gè)兩主機(jī)名訪問其他計(jì)算機(jī)上的 WEB 站點(diǎn),則應(yīng)將 127.0.0.1 修改成其他計(jì)算機(jī)的實(shí)際 IP 地址。保存 Hosts 文件后,在命令行窗口中執(zhí)行“ ping site1 ”和“ ping site2 ”命令,查看該主機(jī)名是否被正確解析到了相應(yīng)的 IP 地址上。建立 site1 和 site2 與計(jì)算機(jī) IP 地址的映射后,在 IE 瀏覽器地址欄中輸入 http://localhost:8080/test.html 、 http://site1:8080/test.html 和 http://site2:8080/test.html ,可以看到瀏覽器將顯示出各自站點(diǎn)中的 test.html 網(wǎng)頁文件的內(nèi)容。
可見,使用主機(jī)名的方式在同一臺 WEB 服務(wù)器上創(chuàng)建多個(gè)虛擬主機(jī)后,在 WEB 瀏覽器中使用主機(jī)名訪問 Web 服務(wù)器時(shí), Web 服務(wù)器將選擇與該主機(jī)名關(guān)聯(lián)的 WEB 站點(diǎn)進(jìn)行響應(yīng)。通過這種方式,多個(gè) WEB 站點(diǎn)可以共享同一個(gè) IP 地址和相同的端口號,唯一不足的就是 WEB 瀏覽不能通過 IP 地址去訪問這些 WEB 站點(diǎn)。基于主機(jī)名的虛擬主機(jī)是目前 Internet 上的大多數(shù)虛擬主機(jī)業(yè)務(wù)提供商所通常采用的方式。只要找出幾個(gè)小型公司或個(gè)人的網(wǎng)站,如果在 WEB 瀏覽器地址欄中輸入“ http:// 主機(jī)名”可以訪問到該 WEB 站點(diǎn),接著在命令行窗口中執(zhí)行“ ping 主機(jī)名”,查看到該域名對應(yīng)的 IP 地址,然后在 WEB 瀏覽器地址欄中輸入“ http://IP 地址”時(shí),卻無法訪問這個(gè) WEB 站點(diǎn)了,那么,這個(gè) WEB 站點(diǎn)就是一個(gè)基于主機(jī)名的虛擬主機(jī),它與其他一些 WEB 站點(diǎn)共享一臺 WEB 服務(wù)器,而不是自己獨(dú)享一臺 WEB 服務(wù)器。
注意:當(dāng)使用安全套接字層 (SSL) 時(shí),不能使用主機(jī)頭字段來實(shí)現(xiàn)虛擬主機(jī),這是因?yàn)槭褂? SSL 的 HTTP 請求有加密保護(hù)。主機(jī)頭字段是加密內(nèi)容的一部分,不能被解釋和 路由 到正確的站點(diǎn)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
