Webapp 不使用代理
在我用來展示系統的單個伺服器上,我有一個在 apache2 上執行的靜態網站和一個在 tomcat 實例上執行的展示 Web 應用程序。直接訪問時兩者都工作正常。我已經設置了一個代理來將 Web 應用程序埠和凌亂的 URL 轉換為簡單的東西,但我得到的結果不一致。
伺服器是帶有 Apache2 的 Digital Ocean Ubuntu 18.04 droplet。我的主要網站使用 Drupal 並且有一個標準 URL
https://example.com
。Web 應用程序是一個由 Tomcat7 提供服務的大型企業系統,訪問地址為https://example.com:4444/webui/
目標是訪問
https://example.com/my_demo
.代理以標準方式在apache2虛擬主機中定義
ProxyPass "/webui" "https://example.com:4444/webui/" ProxyPassReverse "/my_demo" "https://example.com:4444/"
並且tomcat應用在server.xml中有一個代理入口
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="4444" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/opt/webapp/keystore/webappKeystore" keystorePass="redactedPassword" clientAuth="false" sslProtocol="TLS" proxyName="example.com" proxyPort="443"/>
這似乎有效,但還不夠好。
我遇到的問題是 Web 應用程序始終無法使用代理。它是用 ZK 編寫的,並且混合了使用應用程序上下文路徑的資源引用,例如(“/webui/images/theimage.jpg”)和其他使用 ZK 桌面上下文的資源引用,最終可以發送“images/theimage.jpg” ”。因此,Web 應用程序在某些地方似乎缺少按鈕圖像,但在其他地方卻沒有。
此外,在註銷時,webapp 將瀏覽器重定向回 tomcat 地址,但連結被破壞並以 /webui/index 結束並出現 403 錯誤,而不是 /webui/index.zul,就好像它被錯誤地重寫了一樣。
同樣,當從 tomcat 伺服器執行而不通過代理時,Web 應用程序工作得很好。
我正在尋找有關如何調試它並使 tomcat Web 應用程序在代理下工作的建議。我已經嘗試使用 dump_io 和重寫日誌,但除了上面提到的問題之外,看不到錯誤發生在哪裡。
還有其他一些我應該檢查的元素嗎?
任何建議,將不勝感激。
您的問題歸結為重寫來自應用程序伺服器的絕對請求 URI。這可以做兩件事:
- Apache2 可以重寫代理內容中的所有 URI。擷取所有可能出現 URI 的位置是相當困難的。
- Tomcat7 可以使用與 Apache 伺服器相同的絕對請求 URI。
我建議第二種方式,因為它是最簡單的一種。你應該:
- 將 Web 應用程序部署在
/my_demo
而不是/webui
. 這可能就像重命名webapps/webui
為webapps/my_demo
in一樣簡單CATALINA_BASE
。- 將 Apache 配置為代理
/my_demo/
到https://example.com:4444/my_demo/
:ProxyPass "/my_demo/" "https://example.com:4444/my_demo/" ProxyPassReverse "/my_demo/" "https://example.com:4444/my_demo/"
PS:對 Tomcat 使用 HTTPS 恕我直言,只需要配置一個 HTTP 連接器並更改
secure
和scheme
屬性,以便 Tomcat 知道它是通過 HTTPS 代理的:<Connector port="4444" scheme="https" secure="true" proxyName="example.com" proxyPort="443"/>
並在指令中更改
https
為。http``ProxyPass