MENU

nginx添加jvm_route模块,解决tomcat的Session共享问题

2016 年 10 月 21 日 • 应用服务器

为什么要这样干

比较简单方便,只需要重新编译一下nginx,tomcat修改一条东西即可,比redis做省事的多,但是新版本的nginx不支持这个,我测试最高到nginx1.2.9,几个月前找到一个支持1.6的,现在又多了一个1.11.7的,以后文章不会再次更新了,需要的看下面的地址,自己去下载吧,还有就是用这个插件不是真正意义上的解决了session共享,他只是session的复制粘贴,如果后端节点一个崩了,session就会失效,无法进行会话转移,所以还是建议使用redis做共享,tomcat版本要求是6.0.0及以上版本,5.x的不支持,别想了。

软件下载地址

jvm-route 插件下载地址
https://github.com/search?utf8=%E2%9C%93&q=jvm+route&type=Repositories&ref=searchresults

nginx 下载地址
http://nginx.org/download/

软件环境

nginx IP :192.168.1.213 软件版本:nginx-1.2.9
tomcat1 IP:192.168.1.214 软件版本: tomcat版本:7.0.70
tomcat2 IP:192.168.1.215 软件版本: tomcat版本:7.0.70

软件包

包含nginx-1.2.9 和 jvm_route插件
nginx-1.2.9.zip

包含nginx-1.6.3和 jvm_route插件
nginx-1.6.zip

配置nginx

解压软件包

1.编译nginx
cd nginx-1.2.9
patch  -p0 < ../nginx-upstream-jvm-route-master/jvm_route.patch    #自己插件对应路径
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/src/nginx-upstream-jvm-route-master
make
make install
2.修改配置文件
upstream backend {
  server 192.168.1.214:8080 srun_id=tomcat1;
  server 192.168.1.215:8080 srun_id=tomcat2;
  jvm_route $cookie_JSESSIONID|sessionid reverse;
}
    server {
        listen       80;
        server_name  www.dalin.com;
        location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}

nginx这样就可以了,配置tomcat,顺便解释一下srun_id=tomcat1;的那个是什么意思。

配置tomcat

1.修改server.xml,

在后面加上这个,这里的配置要对应nginx的配置,现在改的是192.168.1.214,所以是tomcat1

     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

2.创建测试页面。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
    </head>
    <body>
     tomcat1   #分两个名字
    <br/><%out.print(request.getSession()) ;%> <br/>
    <%out.println(request.getHeader("Cookie")); %>
    </body>
</html>

测试一下

结果就是怎么刷新页面,输出结果都不变。如果是1、2切换,就说明没成功。注意自己的nginx算法是轮训。

最后编辑于: 2018 年 12 月 10 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码