每個虛擬伺服器都透過一個或多個 HTTP 偵聽程式,來提供伺服器與用戶端之間的連線。每個 HTTP 偵聽程式都是具有 IP 位址、連接埠號碼、伺服器名稱以及預設虛擬伺服器的偵聽插槽。
HTTP 偵聽程式必須具有唯一的連接埠號碼和 IP 位址組合。例如,透過將 IP 位址指定為 0.0.0.0,HTTP 偵聽程式可以在機器的給定連接埠上偵聽所有已配置的 IP 位址。或者,HTTP 偵聽程式可以為每個偵聽程式指定唯一的 IP 位址,但使用相同的連接埠。
由於 HTTP 偵聽程式是 IP 位址和連接埠號碼的組合,因此您可以擁有多個 IP 位址相同但連接埠號碼不同 (例如 1.1.1.1:8081 和 1.1.1.1:8082) 的 HTTP 偵聽程式,或 IP 位址不同但連接埠號碼相同 (例如 1.1.1.1:8081 和 1.2.3.4:8081) 的 HTTP 偵聽程式 (如果已將機器配置為可以回應這些位址)。
不過,如果 HTTP 偵聽程式使用 0.0.0.0 IP 位址 (偵聽某個連接埠上的所有 IP 位址),您便無法建立其他 IP 位址的 HTTP 偵聽程式 (偵聽特定 IP 位址的同一連接埠)。例如,如果 HTTP 偵聽程式使用 0.0.0.0:8080 (連接埠 8080 上的所有 IP 位址),則其他 HTTP 偵聽程式不能使用 1.2.3.4:8080。
由於執行 Application Server 的系統通常只能存取一個 IP 位址,因此 HTTP 偵聽程式通常使用 0.0.0.0 IP 位址和不同的連接埠號碼,其中每個連接埠號碼用於不同目的。如果系統可以存取多個 IP 位址,則每個位址均可用於不同目的。
依預設,Application Server 啟動時,它具有以下 HTTP 偵聽程式:
兩個分別名為 http-listener-1 和 http-listener-2 的 HTTP 偵聽程式,這兩個偵聽程式與名為 server 的虛擬伺服器相關聯。名為 http-listener-1 的偵聽程式未啟用安全性;而 http-listener-2 已啟用了安全性。
名為 admin-listener 的 HTTP 偵聽程式,該偵聽程式與名為 __asadmin 的虛擬伺服器相關聯。此偵聽程式已未啟用安全性。
所有這些偵聽程式均使用 IP 位址 0.0.0.0,以及在安裝 Application Server 期間指定為 HTTP 伺服器連接埠號碼的連接埠號碼。如果 Application Server 使用預設連接埠號碼值,則 http-listener-1 使用連接埠 8080、http-listener-2 使用連接埠 8181、admin-listener 使用連接埠 48489。
每個 HTTP 偵聽程式均有一個預設虛擬伺服器。當請求 URL 的主機元件與 HTTP 偵聽程式關聯的所有虛擬伺服器 (在虛擬伺服器的 http-listeners 屬性中列出 HTTP 偵聽程式,即可將虛擬伺服器與該 HTTP 偵聽程式關聯起來) 均不相符時,HTTP 偵聽程式會將所有請求 URL 路由至預設虛擬伺服器。
此外,還應在 HTTP 偵聽程式中指定接收器執行緒的數目。接收器執行緒就是等待連線的執行緒。執行緒接受連線並將其放入佇列 (稱為連線佇列) 中,在佇列中將由工作者執行緒接受這些連線。配置足夠多的接收器執行緒,以便在發生新的請求時總有一個可用,但又需要數目相當少,以免給系統造成太重負擔。在 Application Server 中,接收器與請求處理 (工作者) 執行緒之間沒有區別。每一個 HTTP 偵聽程式執行緒均負責接受與處理請求。因此,Application Server 預設配置中的 HTTP 偵聽程式會使用 50 個接收器執行緒。連線佇列既包括接收器執行緒剛剛接受的新連線,又包括持續作用連線管理子系統管理的永久性連線。
一組請求處理執行緒將從連線佇列中擷取內送的 HTTP 請求並對其進行處理。這些執行緒將剖析 HTTP 標頭,選取適當的虛擬伺服器並透過請求處理引擎處理請求。當沒有更多要處理的請求,但可以保持永久性連線 (透過使用 HTTP/1.1 或傳送 Connection: keep-alive 標頭) 時,請求處理執行緒會假定連線處於閒置狀態,並將連線傳送給持續作用連線管理子系統。
持續作用子系統會定期輪詢此類閒置連線,並將使用中的連線列入連線佇列中,以便將來進行處理。請求處理執行緒將再次從連線佇列中擷取連線並處理其請求。持續作用子系統是多執行緒的,可以管理大約數萬個連線。透過將大量連線分成較小的子集,使用有效的輪詢技術來確定哪些連線已就緒並具有請求,以及哪些連線由於處於閒置狀態的時間較長而被視為已關閉 (超過允許的持續作用逾時的最大值)。
HTTP 偵聽程式的伺服器名稱即為重新導向期間由伺服器傳送給用戶端的 URL 中顯示的主機名稱。此屬性會影響伺服器自動產生的 URL;但不會影響儲存在伺服器中目錄和檔案的 URL。如果伺服器使用一個別名,則該名稱應為此別名。如果用戶端傳送 Host: 標頭,則在重新導向中該主機名稱將取代 HTTP 偵聽程式的伺服器名稱值。
要使用不同於原始請求中指定連接埠號的連接埠號碼,請指定重新導向連接埠。如果發生以下某種情況之一,則會進行重新導向︰
如果用戶端嘗試存取已不存在於指定 URL 處的資源 (即該資源已移至其他位置),伺服器將傳回一個指定的回應碼,並在回應的位置標頭中包含新的位置,從而將用戶端重新導向至新位置 (而不是傳回 404)。
如果用戶端嘗試透過常規 HTTP 連接埠存取受保護的資源 (例如 SSL),則伺服器會將此請求重新導向至啟用了 SSL 的連接埠上。在此情況下,伺服器將在位置回應標頭中傳回一個新的 URL,其中的原始非安全連接埠將由啟用 SSL 的連接埠所取代。用戶端隨後會連線到這個新的 URL。
此外,還應指定是否為 HTTP 偵聽程式啟用安全性以及使用哪種類型的安全性 (例如使用哪個 SSL 協定以及哪些密碼)。
若要存取部署在 Application Server 上的 Web 應用程式,請使用 URL http://localhost:8080/ (或者,如果是安全應用程式,則使用 https://localhost:8181/) 和為此 Web 應用程式指定的環境根目錄。若要存取管理主控台,請使用 URL https://localhost:4848/ 或 http://localhost:4848/asadmin/ (其預設環境根目錄)。
由於虛擬伺服器必須指定一個現有的 HTTP 偵聽程式,並且不能指定其他虛擬伺服器已使用的 HTTP 偵聽程式,因此在建立新虛擬伺服器之前,應至少建立一個 HTTP 偵聽程式。