配置 Apache、Tomcat、mod_jk 和 mod_rewrite 以從頂層提供 tomcat
我正在嘗試將我的 java 應用程序設置為新站點的主要組件。
我有一些我希望 Apache 提供的靜態資源,所以我使用以下規則設置 Apache 和 Mod_jk,
JkMount /java_app* ajp13 JkUnmount /*static/* ajp13 RewriteEngine On RewriteRule ^/$ /java_app/ [L,PT]
工人歸檔,一切正常。當我去http://www.example.com/時,由於重寫規則,我得到了我的 java 應用程序的索引文件。如果我瀏覽該站點,由於 mod_jk,我仍然會獲得我的 java 應用程序,例如http://www.example.com/java_app/view/1/。
問題:當我返回http://www.example.com時,我完全失去了任何會話資訊。如果我已登錄,則我已註銷,並且來自那裡的連結將附加 jsessionids。
我該如何解決?這是連接apache和tomcat的正確方法,還是有更好的方法?
編輯:
為了回應第一個答案,
還是有點卡。當我載入螢火蟲時,當我導航到
/
Set-Cookie JSESSIONID=8D63C9682E39B81F669E277ED07542E1; Path=/javaapp
當我在 java 應用程序中瀏覽時,我發現同樣的情況
jsessionid
一直存在 - firebug 說我正在發送請求標頭。當我
/
再次點擊時,我在響應中得到這個,Set-Cookie JSESSIONID=5DC9F39CE85AB1E71B8D87EB9D485FE9; Path=/javaapp
所以我猜Apache在沒有我的cookie資訊的情況下轉發我的請求,所以Tomcat給了我一個新的?我可以告訴 mod_rewrite 說 ex。
^/$ /javaapp/;jsessionid={cookie}
?
不要使用
mod_jk2
(無論如何都已棄用),而是將mod_proxy與ProxyPass和ProxyReversePass 一起使用。更容易配置,即使是靜態內容的例外也可以輕鬆表達:ProxyPass /statics ! ProxyPass / http://localhost:8080 ProxyPassReverse / http://localhost:8080
缺點很明顯,如果 Java 應用程序想要讀取客戶端的 IP 地址(和其他客戶端資訊),它將獲取 Apache 的地址,因為他是播放代理。對於這種情況,您將需要使用
mod_jk
我懷疑這是一個cookie路徑問題。要確認這一點,您可以啟動 HTTP 調試器並分析 HTTP 流量。