Sun Java System Application Server 9.1 高可用性管理指南

proxyHandler 特性

Application Server 的代理伺服器處理程式負責擷取遭代理伺服器 (在此例中指的是負載平衡器) 攔截、並轉寄至應用程式伺服器之原始用戶端請求的相關資訊,同時負責將此資訊提供給做為用戶端請求之目標的 Web 應用程式 (部署於應用程式伺服器上)。如果代理伺服器的截取遭 SSL 終止,代理伺服器處理程式會擷取並提供有關原始請求的其他資訊,例如原始請求是否為 HTTPS 請求,以及 SSL 用戶端認證是否啟用。只有當 authPassThroughEnabled 設定為 true 時,才使用 proxyHandler 屬性。

代理伺服器處理程式會檢查內送請求中是否有自訂請求標頭,而代理伺服器就是藉由該自訂請求標頭傳送和原始用戶端請求相關的資訊,並使用標準的 ServletRequest API 向 Application Server 上的 Web 應用程式提供這項資訊。

代理伺服器處理程式實作可透過 proxyHandler 特性,在 HTTP 服務層級上進行全域配置,或是針對個別的 HTTP 偵聽程式進行配置,而該特性的值會指定 com.sun.appserv.ProxyHandler 抽象類別之實作的完全合格類別名稱。可進行配置的代理伺服器處理程式實作允許 Application Server 搭配任何代理伺服器,只要代理伺服器處理程式實作知道 HTTP 請求的標頭名稱,並了解其值的格式,而代理伺服器就是以此方式傳送與原始用戶端請求相關的資訊。

Application Server 的代理伺服器處理程式會從請求標頭讀取並剖析 SSL 憑證鏈。此舉讓後端 Application Server 實例得以擷取原始用戶端請求 (遭到終止 SSL 的代理伺服器所攔截;該代理伺服器在此指的是負載平衡器) 的相關資訊。您可以使用預設的代理伺服器處理程式設定,或是使用 HTTP 服務或 HTTP/HTTPS 偵聽程式的 proxyHandler 特性自行加以配置。proxyHandler 特性會針對該偵聽程式或所有偵聽程式所使用的 com.sun.appserv.ProxyHandler 抽象類別之自訂實作,指定完全合格類別名稱。

此抽象類別的實作會檢視自訂請求標頭的指定請求,而代理伺服器就是透過該自訂請求標頭,將原始用戶端請求的相關資訊傳送至 Application Server 實例,並將該資訊傳回至其呼叫者。預設實作會從名為 Proxy-ip 的 HTTP 請求標頭讀取用戶端 IP 位址、從名為 Proxy-keysize 的 HTTP 請求標頭讀取 SSL 金鑰大小,並從名為 Proxy-auth-cert 的 HTTP 請求標頭讀取 SSL 用戶端憑證鏈。Proxy-auth-cert 值必須包含 BASE-64 編碼的用戶端憑證鏈且無 BEGIN CERTIFICATE 和 END CERTIFICATE 邊界,並以 % d% a 取代 \n

只有當 authPassThroughEnabled 設定為 true 時,才能使用這項特性。如果您在個別的 HTTP 或 HTTPS 偵聽程式上設定 proxyHandler 特性,該特性會覆寫所有偵聽程式的預設設定。

使用 asadmin set 指令來設定 HTTP 服務或個別 HTTP 偵聽程式上的 proxyHandler 特性。

如果要在所有的 HTTP/HTTPS 偵聽程式上設定 proxyHandler 特性,請使用下列指令:

asadmin set cluster-name-config.http-service.property.proxyHandler= classname

如果要在個別的偵聽程式上進行設定,請使用下列指令:

asadmin set cluster-name-config.http-service.http-listener. listener-name.property.proxyHandler= classname