Ssl

Apache mod_jk SSL & appBase

  • February 21, 2021

我正在為 Apache 設置 mod_jk 以與 Tomcat 一起使用,我遇到了兩個問題。

SSL

我在 Apache 上啟用了 SSL,所有流量都通過 HTTPS,包括轉發到 Tomcat 的請求。Tomcat 是否也需要以任何方式配置 SSL 或者 Apache 是否完全處理它?我發現的所有內容都沒有說 Tomcat 需要任何配置,但我在 Tomcat 中收到以下可能相關的錯誤。

IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens

appBase/安裝

我在 Tomcat 中的 appBase 是典型的“path/to/webapps”,當 Apache 轉發請求時,它自然會給出完整路徑。但是,由於我只想將某些 URL 轉發到 Tomcat,所以我的 JkMount 看起來像“JkMount /apps/* worker1”。問題是 Tomcat 將在“path/to/webapps/apps/”中尋找應用程序,這不是應用程序部署所在的目錄。使用 RewriteRule 從我假設的路徑中刪除“應用程序”會導致它不會被轉發到 Tomcat。我不確定是否有更好的解決方案。

所有流量都通過 HTTPS,包括轉發到 Tomcat 的請求

這並不完全正確。如果您使用mod_jk,則從 Apache 到 Tomcat 的請求使用AJP,這是一種非加密二進制協議。您在日誌中發現的錯誤意味著某些東西正在使用二進制協議連接到 Tomcat的**HTTP連接器。**確保您的 Tomcat 配置中有一個 AJP 連接器:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

並且您使用相同的埠(例如8009)而不是 mod_jk 中的 HTTP 埠worker.properties

關於JkMount指令,無法使用mod_jk重寫 URI 路徑:如果 Apache 收到請求表單https://example.com/apps/foo/bar,它將向 Tomcat 請求/apps/foo/bar.

如果您希望 Apache 進行檢索/foo/bar,您可以使用mod_proxy_ajp而不是 mod_jk:

ProxyPass "/apps" "ajp://backend.example.com:8009"

但是,我建議不要重寫請求的 URI 路徑。如果你這樣做,你會遇到這樣的問題

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