Apache-2.2
如何強制 Apache 負載均衡器將 http 302 重定向重寫為 https?
我有一個網站,我希望始終在 https 中提供服務。該站點使用 Apache 進行負載平衡。
Apache 負載均衡器的配置基本上是這樣的:
<Proxy balancer://mycluster> BalancerMember http://server1 route=server1 BalancerMember http://server2 route=server2 </Proxy>
請注意,所有 http請求也都使用 mod rewrite 重寫為 https 請求。
我想做的事情是確保來自伺服器 1 或伺服器 2 的任何 http 302 Location 標頭都被重寫並作為 https 302 重定向標頭髮送。
例如
如果來自伺服器 1 的響應具有以下標題:
Location: http://server1/test
我希望它被安全地重寫為
Location: https://server1/test
這將避免將請求發送到客戶端,然後客戶端發送 http 請求,該請求將被重寫為 https,並且還將避免通過 http 發送響應的任何安全問題。
我怎樣才能做到這一點?
您不能使用 mod_rewrite 執行此操作,因為這僅適用於請求。
此外,在 Location 上操作不是 100% 的解決方案(它會非常高),因為它不會擷取諸如 HTTP 元刷新(這些天不太常見……)之類的東西,或者生成 URL 的實例使用客戶端解決方案(例如 Javascript、嵌入式內容)。
因此,您提出的願望雖然有用,但必須僅視為優化。
在事物的應用端也可能存在敏感性。在不了解您的應用程序的情況下,以下是一些需要考慮的潛在事項:
- cookie 生成和使用諸如“安全”屬性之類的東西
- 應用程序可能已經生成了 URL 並進行了某種加密簽名(可能出於 SSO 或身份驗證的目的,並且將其重寫為 https 可能會使 URL 無效)……在實踐中不太可能,但肯定是可能的。
不過,您也許可以使用 mod_header 來執行此操作,它可以操縱響應標頭。見http://httpd.apache.org/docs/2.2/mod/mod_headers.html
Header edit Location ^http: https:
我根本沒有測試過,注意可以在
edit
關鍵字之前指定條件。希望它有幫助,卡梅倫