Apache-2.2

反向代理 - 了解代理通行證 - apache mod_proxy

  • January 24, 2020

我在我的 linux 伺服器上執行 tomcat,我想為此使用反向代理。在閱讀了 apacha 中 mod_proxy 的手冊後,我並沒有真正理解 proxypass 中的 /path 。

我舉一個小例子。我的 tomcat 的目錄是 /tomcat/webapp。那麼下面的配置正確嗎?:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ProxyRequests Off
ProxyPass /tomcat/webapp         http://127.0.0.1:8080
ProxyPassReverse /tomcat/webapp  http://127.0.0.1:8080
</VirtualHost> 

我會很感激,我有經驗的人可以幫助我。

從理論上講,無論您選擇哪個ProxyPass指令,它都會起作用,即使您選擇代理http://example.com:8080/webapp/http://example.com/foo/bar/baz/.

但是,如果您的應用程序在超連結中使用絕對路徑,最好在ApacheTomcat上使用相同的 URI 路徑,否則您將遇到類似問題的問題。所以:

  • 如果您的應用程序編寫得很好,請選擇您喜歡的 URL 並調整 Tomcat 上的 webapp 部署以適應它。
  • 如果您的應用程序寫得不好(例如,在這個問題中有一些硬編碼路徑,請調整Apache路徑以適應硬編碼部署路徑。

無論哪種方式,您都應該使用:

ProxyPass "/path/to/webapp/" "http://127.0.0.1:8080/path/to/webapp/"

PS:由於顯然您想在兩個埠上執行 Tomcat,最好告訴 webapp 它正在被代理並且該埠8443是通過 SSL 訪問的:

<Connector port="8080"
          proxyName="example.com"
          proxyPort="80"
          redirectPort="443" />
<Connector port="8443"
          proxyName="example.com"
          proxyPort="443"
          scheme="https" secure="true" />

所以 webapp 不會產生從 port8443到 port的無用重定向443

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