Apache-2.2

如何強制 Apache 負載均衡器將 http 302 重定向重寫為 https?

  • September 9, 2014

我有一個網站,我希望始終在 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關鍵字之前指定條件。

希望它有幫助,卡梅倫

引用自:https://serverfault.com/questions/626335