Apache-2.2

配置 Apache、Tomcat、mod_jk 和 mod_rewrite 以從頂層提供 tomcat

  • March 27, 2011

我正在嘗試將我的 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_proxyProxyPassProxyReversePass 一起使用。更容易配置,即使是靜態內容的例外也可以輕鬆表達:

ProxyPass /statics !
ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080

缺點很明顯,如果 Java 應用程序想要讀取客戶端的 IP 地址(和其他客戶端資訊),它將獲取 Apache 的地址,因為他是播放代理。對於這種情況,您將需要使用mod_jk

我懷疑這是一個cookie路徑問題。要確認這一點,您可以啟動 HTTP 調試器並分析 HTTP 流量。

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