1. 程式人生 > >Apache代理請求session無法保持

Apache代理請求session無法保持

問題: 通過Apache代理請求從外網進入開發內網,因外網訪問路徑與內網不統一,使得Apache重寫JSESSIONID,使得每次請求新建會話,客戶端與服務端會話無法保持

解決方法:

1.出處: blog.sina.com.cn/s/blog_02e45c9b01011khc.html:

 

被apache mod_proxy反向代理tomcat session丟失問題折騰了兩個晚上。

關鍵在於tomcat 中的應用context 路徑是 /portal , 而外部訪問 context 路徑是 / , JSESSIONID 的值從瀏覽器經過反向代理到達tomcat時, 由於cookie時內外路徑不一致, 使tomcat每次重寫設定 JSESSIONID 的值,導致session丟失現象,在apache VirtualHost中需要通過 ProxyPassReverseCookiePath 指令做一個路徑對映,詳細如下: 
 

  ProxyPreserveHost On 
   ProxyPass / ://localhost:8080/portal/ 
   ProxyPassReverse / ://localhost:8080/portal/ 
   ProxyPassReverseCookieDomain locahost www.domain.cn 

   ProxyPassReverseCookiePath /portal /

 

2.出處: 

www.myexception.cn/apache/476201.html

 

解決apache反向代理後“session”保持不住的問題
其實很簡單,但是又浪費了多少青春,大把大把的時間。

有關apache的mod_proxy模組,設定反向代理時,如果指向的是
/ -> /foo, 這個時候JSESSIONID的path會被預設設定成/foo,導致請求時不會被接受此id,造成sesssion不斷被重新整理,所謂的保持不住session的現象。

解決辦法非常簡單:
ProxyPassReverseCookiePath /foo /

唉,繞彎繞來繞去,還是要苦讀manual。