(9)Nginx+rtomcat+redis解决session共享问题


由于nginx是随机分配请求

假设一个用户登录时访问网站登录时

被分配到192.168.50.137:8080上,

然后进行了登录操作,此时该服务器上就会有该用户登录的session信息,

然后登陆后重定向到网站首页或个人中心时,

此时如果被分配到192.168.50.139:8080上,

那么这台服务器上没有该用户session信息,于是又会变成未登录状态,

所以由于nginx的负载均衡会导致session共享的问题。

条件

机器 服务
192.168.64.131 nginx tomcat7 redis
192.168.64.132 tomcat7

nginx配置

upstream dynamic{
        server 192.168.64.131:8080 weight=1;
        server 192.168.64.132:8080 weight=3;
        }
        
server {
        listen       80;
        server_name  192.168.64.131;
        
        location / {
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://dynamic; 
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

 tomcat 配置

131机器 index.jsp

<%@ pagelanguage="java" %>



  TomcatA

  
        

ip: 192.168.64.131:8080

Session ID: <%= session.getId() %>

132机器 index.jsp

<%@ pagelanguage="java" %>



  TomcatA

  
        

ip: 192.168.64.132:8080

Session ID: <%= session.getId() %>

第一次测试

 浏览器输入 192.168.64.131  不断的刷新

会发现sessionid 一直都在变化着  不符合需求 接下来我们需要解决session问题

redis安装和配置

yum -y install redis

vim /etc/redis.conf 

修改这两处

daemonize yes
#所有机器都可以访问
bind 0.0.0.0

解决session 共享配置

下载三个jar包 放在tomcat的lib目录下面

commons-pool2-2.4.2.jar
jedis-2.9.0.jar
tomcat-redis-session-manager1.2.jar

 我用这三个成功了(适合tomcat7) 有些版本容易报错或者不适合tomcat7

百度网盘链接:https://pan.baidu.com/s/1IMLG6aQp2vVWr2t065zsbQ   提取码:tnbb

修改131机器132机器的tomcat配置文件context.xml 配置都一样的

    
    

解释

host: 安装redis服务的机器IP地址

port: 6379

database: 选择的数据库 0

启动服务

启动redis服务

重启tomcat服务(应该需要重启的吧)

第二次测试

浏览器输入 192.168.64.131  不断的刷新 发现sessionid 不在变化了(在不清除浏览器cookie的情况下)