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文件中都加入
f、将两个tomcat设置成不同的端口(我的是8080和8081),在webapps下面新建www文件夹,并在www文件夹下新建index.jsp文件,文件的内容分别
<%@ pagelanguage="java" %>
和
<%@ pagelanguage="java" %>
<%
out.println("This is Tomcat-2");
%>
sessionID:<%=session.getId()%>
SessionIP:<%=request.getServerName()%>
SessionPort:<%=request.getServerPort()%>
通过以上步骤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是一样的。验证成功