用 Nginx 反向代理多台服务器的时候,会出现 session 不同步的问题,如用户在tomcat1中登录,保存了用户信息进 session 中,但是tomcat2中的 session 中没有该用户信息,如果用户再次发出请求时分配到了 tomcat2 中,就会出现 找不到用户 session信息,重新调整到登录页面的情况,所以,采用粘性session的方式,同一个IP的所有访问请求都指定到同一个 tomcat中,这样就解决了问题。因为一个用户的请求都会发送到同一台服务器
步骤:
tomcat部分:
部署两台(或者多台)tomcat,如果是同一台电脑的话可以参考我的另一篇博客:https://blog.csdn.net/DGH2430284817/article/details/90417905
web项目部分:
把项目的war包放到每一个 tomcat 的 webapps 目录下,这样在 tomcat 启动的时候,会自动解压部署web项目
nginx部分:
修改conf目录下的 nginx.conf 文件:
upstream tomcatServer{
#同一个ip访问同一个服务器
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcatServer/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
最重要的就是 ip_hash 这个配置,这是nginx自带的,可以实现同一个ip分配到同一个代理服务器
最后启动nginx和tomcat就可以了,session的问题就解决了
注意:
在分布式 session 的三种解决方法中,以上这种是最简单的,而且资源消耗也是最小的,但是缺点就是其中一台tomcat 崩溃后,里面的 session 数据就全没了,单点故障危险大。