使用重新導向將請求從一個 URL 重新導向另一個 URL。例如,使用重新導向將使用者傳送至不同的網站 (例如從舊版應用程式重導向至較新版本),或是從 HTTP 重新導向至 HTTPS,或是從 HTTPS 重新導向至 HTTP。您可以在應用程式中以多種方式啟用重新導向 (例如,以 Servlet 為基礎的重新導向,web.xml 重新導向)。然而,如果要從負載平衡器傳送重新導向 URL,可能需要對 Application Server 或負載平衡器進行其他配置。請注意,重新導向和使用 HTTPS 路由轉寄的請求不同。使用重新導向時,請將 httpsrouting 設定為 false。如果將 HTTPS 請求配置成需轉寄至 HTTP,請使用HTTPS 路由。
下列特性會影響重新導向:HTTP 服務或 HTTP 偵聽程式的 authPassthroughEnabled 和 proxyHandler 特性,以及 loadbalancer.xml 檔案中的 rewrite-location 特性。
當 Application Server authPassthroughEnabled 特性設定為 true 時,會以自訂的請求標頭將有關原始用戶端請求的資訊 (例如用戶端 IP 位址、SSL 金鑰大小、以及認證的用戶端憑證鏈) 傳送至 HTTP 偵聽程式。如果您安裝了硬體加速器,authPassThroughEnabled 特性會讓您利用硬體加速器加快 SSL 認證的進行。在負載平衡器上配置硬體加速器,比在每個叢集的 Application Server 實例上進行配置更為容易。
只有在 Application Server 受防火牆保護後,才能將 authPassthroughEnabled 設定為 true。
使用 asadmin set 指令來設定 HTTP 服務或個別 HTTP 偵聽程式上的 authPassthroughEnabled 特性。個別 HTTP 偵聽程式的設定優先於 HTTP 服務的設定。
如果要在所有的 HTTP/HTTPS 偵聽程式上設定 authPassthroughEnabled 特性,請使用下列指令:
asadmin set cluster-name-config.http-service.property.authPassthroughEnabled=true
如果要在個別的偵聽程式上進行設定,請使用下列指令:
asadmin set cluster-name-config.http-service.http-listener.listener-name.property. authPassthroughEnabled=true
Application Server 的代理伺服器處理程式負責擷取遭代理伺服器 (在此例中指的是負載平衡器) 攔截、並轉寄至應用程式伺服器之原始用戶端請求的相關資訊,同時負責將此資訊提供給做為用戶端請求之目標的 Web 應用程式 (部署於應用程式伺服器上)。如果代理伺服器的截取遭 SSL 終止,代理伺服器處理程式會擷取並提供有關原始請求的其他資訊,例如原始請求是否為 HTTPS 請求,以及 SSL 用戶端認證是否啟用。只有當 authPassThroughEnabled 設定為 true 時,才使用 proxyHandler 屬性。
代理伺服器處理程式會檢視內送請求中的自訂請求標頭,而代理伺服器就是藉由該自訂請求標頭傳送和原始用戶端請求相關的資訊,並使用標準的 ServletRequest API 向應用程式伺服器上的 Web 應用程式提供這項資訊。
代理伺服器處理程式實作可透過 proxyHandler 特性,在 HTTP 服務層級上進行全域配置,或是針對個別的 HTTP 偵聽程式進行配置,而該特性的值會指定 com.sun.appserv.ProxyHandler 抽象類別之實作的完全合格類別名稱。可進行配置的代理伺服器處理程式實作允許應用程式伺服器搭配任何代理伺服器,只要代理伺服器處理程式實作知道 HTTP 請求的標頭名稱,並了解其值的格式,而代理伺服器就是以此方式傳送與原始用戶端請求相關的資訊。
Application Server 的代理伺服器處理程式會從請求標頭讀取並剖析 SSL 憑證鏈。此舉讓後端應用程式伺服器實例得以擷取原始用戶端請求 (遭到終止 SSL 的代理伺服器所攔截;該代理伺服器在此指的是負載平衡器) 的相關資訊。您可以使用預設的代理伺服器處理程式設定,或是使用 HTTP 服務或 HTTP/HTTPS 偵聽程式的 proxyHandler 特性自行加以配置。proxyHandler 特性會針對該偵聽程式或所有偵聽程式所使用的 com.sun.appserv.ProxyHandler 抽象類別之自訂實作,指定完全合格類別名稱。
此抽象類別的實作會檢視自訂請求標頭的特定請求,而代理伺服器就是透過該自訂請求標頭,將原始用戶端請求的相關資訊傳送至應用程式伺服器實例,並將該資訊傳回至其呼叫者。預設實作會從名為 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
如果設定為 true,rewrite-location 特性就會重寫原始的請求資訊,並納入通訊協定 (HTTP 或 HTTPS)、主機和連接埠資訊。依預設,rewrite-location 特性會設定為 true,以維持與先前 Application Server 發行版本的向下相容性。
rewrite-location 特性無法經由 asasmin create-http-lb-config 或 asadmin set 指令取得。如果要使用這項特性,請在匯出負載平衡器配置後,將該特性手動增加至 loadbalancer.xml 檔案。例如,將下列特性增加至所匯出的 loadbalancer.xml 檔案:
<property name="rewrite-location" value="false"/>
設定 rewrite-location 特性時,請記住下列要點:
如果 httpsrouting 為 false,而 Application Server 並未啟用 authPassthroughEnabled,則請將 rewrite-location 特性設定為 true。在 authPassthroughEnabled 未啟用的情況下,Application Server 將無法得知原始請求的通訊協定 (HTTP 或 HTTPS)。如果將 rewrite-location 設定為 true,負載平衡器會適當修改重寫位置的通訊協定部分。也就是說,如果用戶端正在傳送 HTTPS 請求,則負載平衡器會將用戶端重新導向至負載平衡器上已啟用 HTTPS 的偵聽程式連接埠。這項程序和 HTTP 請求相同。
如果 httpsrouting 為 false,並且啟用了 Application Server 上的 authPassthroughEnabled,則可將 rewrite-location 設定為 true 或 false,因為 Application Server 能夠得知用戶端請求是 HTTP 還是 HTTPS。啟用 authPassthroughEnabled 時,Application Server 會適當修改重寫位置的通訊協定部分。如果 rewrite-location 設定為 false,則負載平衡器不會重寫重新導向之 URL 的位置。這項特性如果設定為 true,則會重寫重新導向之 URL 的位置。但是重寫是沒有必要的,因為 Application Server 已經得知來自用戶端的 HTTPS 連線。另外,如果應用程式需要將 HTTP 重新導向至 HTTPS,或是將 HTTPS 重新導向至 HTTP,則必須將 rewrite-location 參數設定為 false。