虛擬主機

虛擬主機是一個配置實體,可讓單一主機類似多部主機。

虛擬主機會維護它所處理的「多用途網際網路郵件延伸 (MIME)」類型清單。您可以讓一部虛擬主機與一或多個 Web 模組相關聯,但是每一個 Web 模組只能與一部虛擬主機相關聯。與一部虛擬主機相關聯的資源無法與另一部虛擬主機的相關聯資源共用資料,即使這些虛擬主機共用同一部實體機器也是如此。

每一部虛擬主機都有一個邏輯名稱和一份內含一或多個用來識別虛擬主機之 DNS 別名的清單。DNS 別名是用來要求 Servlet 的 TCP/IP 主機名稱和埠號,例如 yourHostName:80。如果沒有指定埠號,會假設是 80

虛擬主機配置會在其虛擬主機項目中使用萬用字元項目與埠。
  • 預設別名是 *:80,這是使用不安全的外部埠。
  • *:9080 格式的別名使用不安全的內部埠。
  • *:9443 格式的別名使用安全的內部埠。
  • *:443 格式的別名使用安全的外部埠。

在用戶端所發出的 Servlet、JavaServer Pages 檔或相關資源的要求中,會包含該資源的唯一 DNS 別名和統一資源指示器 (URI)。 當收到用戶端所發出的 Servlet、JavaServer Pages 檔或相關資源的要求時,DNS 別名會用來比對所有已知虛擬主機群組的清單,以找出正確的虛擬主機。 URI 會用來比對所有已知 URI 群組的清單,以找出正確的 URI 群組。 如果找到虛擬主機群組和 URI 群組,會將要求傳送至對應的伺服器群組進行處理,並傳回回應給瀏覽器。如果找不到相符的虛擬主機群組或 URI 群組,會傳回錯誤給瀏覽器。

虛擬主機不會與特定的節點或機器相關聯。這是一項配置,而非真正的物件,所以您可以建立它,但無法啟動或停止它。預設虛擬主機的名稱是 default_host,會在您第一次啟動應用程式伺服器時自動配置。除非您明確希望將同一節點或實體機器上的資源彼此隔離,否則,除了預設主機,可能就不需要其他任何的虛擬主機。

預設虛擬主機的 DNS 別名會配置成 *:80*:9080,其中埠 80 是 HTTP 伺服器埠,埠 9080 是預設伺服器的 HTTP 傳輸埠。預設虛擬主機含有一般別名,例如:機器的 IP 位址、簡短主機名稱和完整主機名稱。這其中有一個別名由路徑的第一個部分組成,以用來存取 Servlet 等資源。例如,在要求 http://localhost:80/myServlet 中使用別名 localhost:80

當您要求資源時,產品會嘗試將該要求對映至所定義之虛擬主機的別名。虛擬主機的 http://host:port/ 部分不區分大小寫,但其後的 URL 有區分大小寫。URL 的相符項必須英數字元完全相符。不同的埠號會視為不同的別名。

例如,要求 http://www.myhost.com/myservlet 會順利對映至 http://WWW.MYHOST.COM/myservlet,但不會對映至 http://WWW.MYHOST.COM/MYSERVLETWww.Myhost.Com/Myservlet。以後面兩個案例來說,這些對映失敗,因為它會區分大小寫。要求 http://www.myhost.com/myservlet 無法順利對映至 http://myhost/myservlethttp://myhost:9876/myservlet。這些對映失敗,因為它們的英數字元不正確。

您可以依不同埠,在別名中使用萬用字元,並指定特定埠上所有有效的「主機名稱和位址」組合,會對映至特定的虛擬主機。

如果您使用別名來要求資源,但該別名無法對映至所定義之虛擬主機的別名,您會在用來發出要求的瀏覽器中收到 404 錯誤。訊息會指出找不到該虛擬主機。

虛擬主機會出現兩組關聯。應用程式部署會使應用程式與虛擬主機相關聯。虛擬主機定義會使下列項目與虛擬主機相關聯:機器的網址與應用程式伺服器的 HTTP 傳輸或 Web 伺服器埠指派。例如,當您查看 Web 用戶端的 Snoop Servlet 要求的流程時,會進行下列動作:
  1. Web 用戶端要求取得位於下列網址的 Snoop Servlet:http://www.some_host.some_company.com:9080/snoop
  2. some_host 機器使用指派給獨立式應用程式伺服器 server1 的 9080 埠。
  3. Server1 查看虛擬主機指派,以判斷指派給別名 some_host.some_company.com:9080 的虛擬主機。
  4. 應用程式伺服器發現該 DNS 字串沒有明確的別名。不過,在 9080 埠存在指派了萬用字元的主機名稱 *,因此,這個萬用字元是相符項。 定義該相符項的虛擬主機是 default_host。
  5. 應用程式伺服器查看部署在 default_host 上的應用程式,並找到了 Snoop Servlet。
  6. 應用程式伺服器提供該應用程式給 Web 用戶端,且要求端能夠使用 Snoop Servlet。
表 1. 虛擬主機的別名
虛擬主機 別名 埠號
default_host * 9080
default_host localhost 9080
default_host my_machine 9080
default_host my_machine.my_company.com 9080
default_host localhost 80

虛擬主機可以有任意數量的別名。甚至於別名可以重疊,例如:

應用程式伺服器會利用 Web 用戶端位址中指定的明確位址,來尋找相符項。不過,在符合明確的位址之前,它可能將相符項解析成符合型樣的其他任何別名。先在別名清單中定義一個別名,不能保證每當產品尋找相符別名時的搜尋順序。

具有重疊別名的虛擬主機。假設您不慎為 admin_host 定義了埠 9080 而非埠 9060,導致兩部虛擬主機的別名重疊:

如果兩部不同的虛擬主機使用相同的別名,可能會發生問題。舉例來說,假設您在 default_host 上安裝了預設應用程式和 Snoop Servlet。您還有另一部虛擬主機,其名稱是 admin_host。不過,您未在 admin_host 上安裝預設應用程式或 Snoop Servlet。

表 2. 具有重疊別名的虛擬主機。
虛擬主機 別名 埠號
default_host * 9080
default_host localhost 9080
admin_host * 9060
admin_host my_machine.com 9080

假設送入了 Web 用戶端的 http://my_machine.com:9080/snoop 要求。

如果應用程式伺服器根據 *:9080 來比對要求,則會從 default_host 提供應用程式。如果應用程式伺服器將要求與 my.machine.com:9080 相互比對,就會找不到應用程式。發出要求的瀏覽器中會出現 404 錯誤。訊息會指出找不到該虛擬主機。

此問題的原因在於在具有相符別名的第一部虛擬主機中,找不到所要求的應用程式。別名的正確編碼方式是,使送入要求中的別名只符合您所有虛擬主機定義中的一部虛擬主機。如果 URL 可能符合多部虛擬主機,您就會看到上述的問題。


指示主題類型的圖示 概念主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwlp_virtual_hosts_ovr
檔名:cwlp_virtual_hosts_ovr.html