之前在配置tomcat的時候都是一個項目對應一個tomcat,也就是一個端口。最近需要把兩個項目整合到同一個tomcat中,通過配置nginx讓兩個域名指向同一tomcat的不同項目。整合完畢后發現其中一個項目的后台管理系統登錄不了了。經過調試發現原來是session丟失了。上網查了之后得到解決方案。現記錄下來作為備忘。
文章轉自:http://blog.csdn.net/yakson/article/details/46683285
*****************************************************************************************************************************************************************************************
引言
一直以來我都是用nginx1.5.7來作為web服務器和代理服務器來使用,一直都是一個應用對應一個Tomcat也就是一個端口,也只對應一個域名。
今天把服務器上的Tomcat整合了一下,5個應用共用一個Tomcat。
最先出現的問題是,用戶等進入后台時出現異常,找不到登錄的用戶信息!
經調試發現是request請求變成了多個,並且session也不一致,感覺就像是另一個瀏覽器在訪問,得出結論:肯定是session丟失了!
原因
經過認真的分析,得出結論:問題出在Nginx的配置上!
server_name www.weixin4j.org; charset utf-8; root /opt/apache-tomcat-7.0.53/webapps/weixin4j/; location / { proxy_pass http://127.0.0.1:8180/weixin4j/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
此配置會導致cookie存儲的位置不是基於“/”那么在第二次訪問的時候會從新創建session,因此session中的信息丟失。
解決方案
修改cookie的存儲路徑
server_name www.weixin4j.org; charset utf-8; root /opt/apache-tomcat-7.0.53/webapps/weixin4j/; location / { proxy_pass http://127.0.0.1:8180/weixin4j/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header From www.weixin4j.org; proxy_cookie_path /weixin4j/ /; proxy_set_header Cookie $http_cookie; }
重啟服務,測試!
通過!