采用nginx_upstream_jvm_route模块解决tomcat多节点session不一致问题
2015-12-18 17:03
751 查看
这种方式不需要修改web工程只需要对nginx下载nginx_upstream_jvm_route插件,修改tomcat和nginx配置,就能解决session问题。由于这种方式不会把session存储起来,所以当某tomcat节点挂掉之后就会造成用户需要重新登录的问题。
思路:是通过对nginx里面每个参与访问的server都打上不同的标签值,这个值和tomcat的jvmRoute值相同。根据tomcat的特性,当server.xml配置文件中加了jvmRoute值后,会给sessionid加上jvmRoute值的后缀,根据这一特性,nginx_upstream_jvm_route对每次访问请求中的sessionId的值,自动匹配对应的server。这样就会使得每次都访问到同一个tomcat,这样就解决了访问不同tomcat节点,session发生变化的问题。但是这种方式就会有当一直访问的tomcat节点挂掉之后,根据负载的原理,将会访问其它节点,就会造成session发生变化,需重新登录的问题。
具体的实现步骤:
第一步:下载并安装nginx_upstream_jvm_route:
进入nginx目录,并下载和安装nginx_upstream_jvm_route,具体代码如下:
第二步:配置nginx
进入nginx的conf目录用vi命令打开nginx.conf文件,对该文件进行修改:
第三:配置tomcat server.xml
打开tomcat的server.xml, 在两台服务器的tomcat的配置文件中分别找到: <Engine name="Catalina" defaultHost="localhost" > 分别修改为:
第四:向tomcat1和tomcat2中部署相同的应用
第五:运行nginx、tomcat1、tomcat2
打开之后可以在浏览器里面输入:http://127.0.0.1:8081进行测试。可以通过浏览器的调试模式看出sessionID是固定不变的,只有当停掉当前一直访问的tomcat,sessionID才会发生变化
思路:是通过对nginx里面每个参与访问的server都打上不同的标签值,这个值和tomcat的jvmRoute值相同。根据tomcat的特性,当server.xml配置文件中加了jvmRoute值后,会给sessionid加上jvmRoute值的后缀,根据这一特性,nginx_upstream_jvm_route对每次访问请求中的sessionId的值,自动匹配对应的server。这样就会使得每次都访问到同一个tomcat,这样就解决了访问不同tomcat节点,session发生变化的问题。但是这种方式就会有当一直访问的tomcat节点挂掉之后,根据负载的原理,将会访问其它节点,就会造成session发生变化,需重新登录的问题。
具体的实现步骤:
第一步:下载并安装nginx_upstream_jvm_route:
进入nginx目录,并下载和安装nginx_upstream_jvm_route,具体代码如下:
shell $> patch -p0 < ../nginx-upstream-jvm-route-read-only/jvm_route.patch shell $> useradd www shell $> ./configure --user=www --group=www --prefix=/usr/local//nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-upstream-jvm-route-read-only shell $> make shell $> make install
第二步:配置nginx
进入nginx的conf目录用vi命令打开nginx.conf文件,对该文件进行修改:
#Nginx所用用户和组 #user niumd niumd; #工作的子进程数量(通常等于CPU数量或者2倍于CPU) worker_processes 2; #错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #指定pid存放文件 pid logs/nginx.pid; events { #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue #use epoll; #允许最大连接数 worker_connections 2048; } http { include mime.types; default_type application/octet-stream; #定义日志格式 #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; sendfile on; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 75 20; include gzip.conf; upstream tomcat {
<span style="white-space:pre"> </span>#srun_id 值需与tomcat的jvmRoute的值对应 server 127.0.0.1:18080 srun_id=tomcat2; server 127.0.0.1:18081 srun_id=tomcat1; jvm_route $cookie_JSESSIONID|sessionid reverse; } server { listen 8081; server_name 127.0.0.1; location / { proxy_pass ' target='_blank'>http://tomcat;
#这些配置很重要 proxy_redirect off ; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_cookie_path / /; proxy_set_header Cookie $http_cookie; client_max_body_size 50m; client_body_buffer_size 256k; proxy_connect_timeout 30; proxy_send_timeout 30; proxy_read_timeout 60; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; } } }
第三:配置tomcat server.xml
打开tomcat的server.xml, 在两台服务器的tomcat的配置文件中分别找到: <Engine name="Catalina" defaultHost="localhost" > 分别修改为:
Tomcat01: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> Tomcat02: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
第四:向tomcat1和tomcat2中部署相同的应用
第五:运行nginx、tomcat1、tomcat2
打开之后可以在浏览器里面输入:http://127.0.0.1:8081进行测试。可以通过浏览器的调试模式看出sessionID是固定不变的,只有当停掉当前一直访问的tomcat,sessionID才会发生变化
相关文章推荐
- Unable to load configuration. - bean - jar:file:/E:/tomcat-7.0.11/webapps/struts/WEB-INF/lib/struts
- mac tomcat9
- Apache + Tomcat + mod_jk实现集群服务及session共享
- Tomcat7 + JRebel6.3.0 + IntelliJ idea 热部署配置过程+错误分析
- Tomcat服务器集群与负载均衡实现
- TOMCAT访问流程
- Tomcat在Linux上的安装与配置
- eclipse中tomcat能正常启动,但是浏览器访问不了tomcat首页的问题
- CentOS 配置Tomcat服务
- spring mvc 框架项目tomcat 移植到WebSphere
- JConsole监控远程Tomcat服务器
- 构建基于Jenkins+maven+git+tomcat7的持续集成环境
- Linux下tomcat 服务搭建
- Tomcat 工作原理
- [Windows Server 2012] Tomcat安全加固方法
- 重启多个tomcat,可打包成jar文件直接运行
- tomcat与IIS在多IP服务器下的支持
- Tomcat+JSP(servlet)
- 主机无法访问虚拟机linux上启动的tomcat服务
- Tomcat-Nginx虚拟主机配置