反向代理 - 了解代理傳遞 - apache mod_proxy

反向代理 - 了解代理傳遞 - apache mod_proxy

我在我的 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> 

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

答案1

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

但是,如果您的應用程式在超連結中使用絕對路徑,則最好在兩個連結上使用相同的 URI 路徑阿帕契雄貓否則你會遇到類似的問題這個問題。所以:

  • 如果您的應用程式編寫得很好,請選擇您最喜歡的 URL 並調整 Tomcat 上的 Web 應用程式部署以適應它。
  • 如果您的應用程式寫得不好(例如有一些硬編碼路徑,如這個問題調整阿帕契適合硬編碼部署路徑的路徑。

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

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

聚苯乙烯: 因為顯然你想要在兩個連接埠上運行 Tomcat,最好告訴 Web 應用程式它正在被代理並且該連接埠8443是透過 SSL 存取的:

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

因此 web 應用程式不會產生從連接埠8443到連接埠的無用重定向443

相關內容