2012-06-05 52 views
1

我有一個tomcat應用程序運行「http:// localhost:8080/appexploded/login.jsp」(Tomcat)。現在,我已經安裝了Apache和正在運行的mod_proxy使端口80上的所有請求可以被代理到8080在我的httpd.conf文件,這裏是我有:會話屬性不再工作時,通過mod_proxy

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so 

ProxyPass   /ordergeek http://localhost:8080/appexploded 
ProxyPassReverse /ordergeek http://localhost:8080/appexploded 

所以,當我做出了一個請求:8080直接,我的request.getSession()。getAttribute(「BLAH」)從一個頁面到另一個頁面。但是,當我轉到「http://localhost/ordergeek/login.jsp」時,該頁面會設置一個會話屬性,然後重定向到另一個頁面。但是,下一頁嘗試讀取request.getSession()。getAttribute(「BLAH」),並且它找不到它。

當我沒有通過代理...會話屬性的工作。當我通過代理時,他們沒有。我錯過了什麼?

添加以下到我的server.xml:

<Connector port="8080" 
      proxyName="www.myappurl.com" 
      proxyPort="80"/> 
+0

問題在「server.xml:」之後切斷。壞標記? –

+0

你能觀察到服務器的初始響應,特別是Set-Cookie頭部嗎?我懷疑Tomcat發送了一個「path =/appexploded」的cookie,但是對httpd的請求正在發送到/ ordergeek,因此客戶端不會發送cookie。 –

回答

2

這是一個古老的,但因爲這個線程的第一款谷歌的搜索結果,當我幾乎找到了答案其他地方出現,它可能會幫助:

你只需要以獲得加ProxyPassReverseCookiePath指令在Cookies中糾正的路徑:

ProxyPassReverseCookiePath /appexploded /ordergeek 

一旦這個設置,你應該像往常一樣獲得你的會話屬性。

請注意,您必須使用Apache 2.2或更高版本。

0

這是很難改變的web應用的名稱時,Apache正在路徑。您不僅需要使用ProxyPassReverse,還需要翻譯所有傳出的HTML以重寫應用程序放置的所有鏈接。有一個第三方mod_proxy_html模塊可以做到這一點,但你應該重新考慮整個策略。恕我直言重寫HTML是問題的一部分,而不是解決方案的一部分。只需在Tomcat內部重命名您的Web應用程序即可。