(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的情况下)