nginx+tomcat做负载均衡时Session共享验证过程

nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。

  相关应用结构参照下图:

1、准备环境(以windows 64位系统环境为例)

nginx 下载:http://nginx.org/en/download.html

redis 下载:https://github.com/ServiceStack/redis-windows

redisson-all 下载:https://github.com/redisson/redisson/tree/master/redisson-tomcat

redisson-tomcat 下载:https://github.com/redisson/redisson/tree/master/redisson-tomcat

tomcat 自备

2、开干

a、为了在一台机器上做测试,可以复制两个tomcat,并在同一台机器上启动两个tomcat。将下载的redisson-all与redisson-tomcat分别放到tomcat的lib文件下

b、将两个tomcat都配置到环境变量

c、修改catalina.bat 将文件中所有默认出现的CATALINA_HOME,分别对应的换成CATALINA_HOME1,CATALINA_HOME2

d、在tomcat顶级目录下新建redisson.conf.里面配置成 singleServerConfig: address: "redis://127.0.0.1:6379"

e、两个tomcat的context.xml文件中都加入

<Manager className="org.redisson.tomcat.RedissonSessionManager" configPath="${catalina.base}/redisson.conf" readMode="MEMORY" updateMode="DEFAULT"/>


f、将两个tomcat设置成不同的端口(我的是8080和8081),在webapps下面新建www文件夹,并在www文件夹下新建index.jsp文件,文件的内容分别

<%@ pagelanguage="java" %> <html> <head><title>Tomcat-1</title></head> <body> <% out.println("This is Tomcat-1"); %> <br> sessionID:<%=session.getId()%> <br> SessionIP:<%=request.getServerName()%> <br> SessionPort:<%=request.getServerPort()%> </body>

</html>

<%@ pagelanguage="java" %> <html> <head><title>Tomcat-2</title></head> <body> <% out.println("This is Tomcat-2"); %> <br> sessionID:<%=session.getId()%> <br> SessionIP:<%=request.getServerName()%> <br> SessionPort:<%=request.getServerPort()%> </body> </html>

通过以上步骤tomcat的相关部署完结,下面是nginx负载均衡设置

nginx的负载均衡配置,网上很多,大家可以搜索一下,这里仅附上我的配置,供参考

upstream bimatrix_server { server 127.0.0.1:8080; server 127.0.0.1:8081; } location ~ /www { proxy_set_header Connection ; proxy_http_version 1.1; chunked_transfer_encoding off; proxy_buffering off; proxy_pass http://bimatrix_server; client_max_body_size 8M; client_body_buffer_size 128k;

}

3、启动

将redis,nginx,两个tomcat都启动

4、见证奇迹,访问http://localhost/www/

结果告诉我们,同一个浏览器访问nginx同一地址,被分配到了不同tomcat,但是seesion是一样的。验证成功

经验分享 程序员 微信小程序 职场和发展