Apache-2.2

Apache 反向代理在重定向後跳回不安全協議

  • March 20, 2018

我安裝了一個反向代理 apache 伺服器來處理 tomcat 的 SSL 加密。我們有一個 struts Web 應用程序,每次使用response.sendRedirect()時,應用程序都會退回到正常的 HTTP 協議,而不是停留在 HTTPS。該應用程序必須使用這兩種協議執行,並且我無法通過 tomcat 容器處理 SSL。

我可以使用 HTTPS 並通過連結和操作進行導航。但是,如果我遇到一個使用重定向的操作,它只會是 HTTP。為什麼呢?

SSLProxyEngine [off|on] # (Differs between the ssl and the other normal conf)
ProxyPreserveHost On
ProxyPass / http://mysite:1234/
ProxyPassReverse / http://mysite:1234/

這是我的配置。我考慮過在 ssl 配置中切換httphttps,但這會導致:

錯誤的網關

代理伺服器收到來自上游伺服器的無效響應。此外,在嘗試使用 ErrorDocument 處理請求時遇到 502 Bad Gateway 錯誤。

如何讓重定向堅持 HTTPS?

如果 sendRedirect 使用相對路徑,Tomcat 將添加絕對元素,包括 scheme (http/https) 和 servername。

除非您覆蓋它,否則 Scheme 將預設為 http。伺服器名稱將來自您已經仔細傳遞的主機標頭。

我遇到了同樣的問題,並在一個單獨的埠上使用了一個新的 Tomcat 連接器(與現有的連接器一起),它覆蓋了該方案並設置了良好的埠:

<Connector port="8443" protocol="HTTP/1.1" URIEncoding="UTF-8"
                   connectionTimeout="20000"
                   scheme="https" proxyPort="443"/>

然後在 Apache 中,SSL 虛擬主機具有:

ProxyPass / http://<tomcat_server>:8443/

普通 HTTP 虛擬主機繼續使用現有的連接器埠 (8080)

或者,您可以在呼叫 sendRedirect() 時硬編碼重定向位置,但這顯然不靈活。

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