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

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