解決nginx中proxy_pass到tomcat的session丟失問題

引言

  一直以來我都是用nginx1.5.7來做爲web服務器和代理服務器來使用,一直都是一個應用對應一個Tomcat也就是一個端口,也只對應一個域名。 
  今天把服務器上的Tomcat整合了一下,5個應用共用一個Tomcat。 
最早出現的問題是,用戶等進入後臺時出現異常,找不到登陸的用戶信息! 
  經調試發現是request請求變成了多個,而且session也不一致,感受就像是另外一個瀏覽器在訪問,得出結論:確定是session丟失了!html

緣由

  通過認真的分析,得出結論:問題出在Nginx的配置上!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中的信息丟失。web

解決方案

修改cookie的存儲路徑apache

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;
}

重啓服務,測試! 
經過!瀏覽器

相關文章
相關標籤/搜索