需求:
  公司后端两台tomcat做负载,前端nginx接收用户请求;为了使无论用户请求到后端哪台设备其session都能保持一致,需要做session绑定;
所需软件:
tomcat8、redis、nginx
用到的插件:
https://github.com/ran-jit/tomcat-cluster-redis-session-manager
部署:
1、下载安装tomcat
2、部署redis
3、解压tomcat-cluster-redis-session-manager插件包
3.1、将插件解压包中的lib目录下的所有jar包copy到tomcat的lib目录下
cp /root/tomcat-cluster-redis-session-manager/lib/* /usr/local/tomcat/lib/
3.2、将插件解压包目录中conf目录下的redis-data-cache.properties配置文件copy到tomcat的conf目录下
cp /root/tomcat-cluster-redis-session-manager/conf/* /usr/local/tomcat/conf/
3.3、配置redis-data-cache.properties

redis.hosts=r-2aaaaaaaaaaaaaa.redis.rds.aliyuncs.com:6379  # 指定redis地址
redis.password=AAAAAAAAA # 指定redis密码
redis.cluster.enabled=false # 关闭集群模式,如果是redis集群则需要开启
redis.sentinel.enabled=false
redis.sentinel.master=mymaster
redis.database=11 # 指定redis库
lb.sticky-session.enabled=false
session.persistent.policies=DEFAULT
redis.sso.timeout=0

4、配置测试页面
4.1、在tomcat的webapps目录下创建test目录
mkdir -pv /usr/local/tomcat/webapps/test
4.2、在test目录下定义测试页面
vim index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页redis-session</title>
</head>
<body>
<div>tomcat 集群测试</div>
<div>
<%
System.out.println(session.getId());
out.println("<br> SESSION ID:" + session.getId()+"<br>");
%>
% </div>
% </body>
% </html>

5、将配置好的tomcat复制一份到另一台设备
6、配置nginx

upstream backstage {
server 192.168.4.23:8080 max_fails=1 fail_timeout=10s;
server 192.168.4.24:8081 max_fails=1 fail_timeout=10s;
} server {
listen 80;
listen 443 ssl;
server_name test.123.com.cn;
ssl_certificate cert/test.123.com.cn.pem;
ssl_certificate_key cert/test.123.com.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!ADH:!MD5;
ssl_prefer_server_ciphers on; if ($server_port = 80) {
rewrite ^/Admin/(.*)$ https://$server_name/Admin/$1 permanent;
} if ($request_uri = /) {
return http://$server_name/Admin/;
} location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Scheme https;
proxy_set_header Via "nginx";
client_max_body_size 10m;
client_body_buffer_size 256k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 512k;
proxy_pass http://backstage;
}
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
}

7、验证测试

无论怎么刷新,其session都是不变的

查看redis中存储的session,跟web页面中展示的session是一致的;

查看日志也是轮询的策略,但是无论请求到哪台后端tomcat其session都是不变的

 总结:

  所有客户端的session信息都将存储在redis中,而不是保存在tomcat自己内部,即使后端某台tomcat挂了,其session信息也不会丢失,同时两台tomcat的session信息也保持了共享;

nginx+redis+tomcat session绑定的更多相关文章

  1. nginx+redis实现session的共享

    上一篇我们介绍了nginx实现的负载均衡和动静分离,可看这边. 我们在文章的末尾说到,负载均衡需要面临的一个问题是内存数据的同步.例如:我有A,B两台服务器做了负载均衡,当我在A服务器上执行了登录并且 ...

  2. nginx redis tomcat 分布式web应用 session共享

    目标:多台tomcat 使用redis实现共享session.redis的安装请参阅:centos上安装redis nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.w ...

  3. Tomcat +Nginx+Redis实现session共享

    一.准备工作 中间件:Tomcat.Redis.Nginx jar包:commons-pool2-2.4.2.jar.jedis-2.8.0.jar.tomcat-redis-session-mana ...

  4. 【原创】搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

    为什么移除首页?哪里不符合要求?倒是回我邮件啊! 一.环境搭建 Linux下Vagrant搭建Tomcat7.Java7 二.Nginx的安装配置与测试 *虚拟机下转至root sudo -i 1)下 ...

  5. 搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

    一.环境搭建 Linux下Vagrant搭建Tomcat7.Java7 二.Nginx的安装配置与测试 *虚拟机下转至root sudo -i 1)下载并解压(目前官网最新版本) 创建安装目录:mkd ...

  6. nginx+tomcat+redis完成session共享

    本文记录nginx+redis+tomcat实现session共享的过程 nginx安装:http://blog.csdn.net/grhlove123/article/details/4783467 ...

  7. nginx+tomcat+redis完成session共享(转载)

    转载:http://blog.csdn.net/grhlove123/article/details/48047735 tomcat7下基于redis的session共享所需jar包: http:// ...

  8. tomcat+nginx+redis实现均衡负载、session共享(一)

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...

  9. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...

随机推荐

  1. webpack与vite的对比

    vite与webpack的打包原理: vite: 基于游览器原生ES Module,利用游览器解析import,服务器端按需编译返回 webpack: 逐级递归识别依赖,构建依赖图谱->转化AS ...

  2. 我用13行摆烂了你的oj4

    13行代码AC oj4是怎么回事呢?13行代码AC oj4相信大家都很熟悉,但是13行代码AC oj4是怎么回事呢,下面就让小编带大家一起了解吧.13行代码AC oj4,其实就是13行代码AC oj4 ...

  3. BUUCTF刷题记录(更新中...)

    极客大挑战 2019]EasySQL-1 直接通过输入万能密码:' or 1=1#实现注入: 思考:服务端sql语句应该为:select * from users where username='xx ...

  4. 以圆类 Circle 为基础设计球类 Sphere

    学习内容:实验二以圆类 Circle 为基础设计球类 Sphere 代码示例: import java.util.Scanner; class Point{ private double x; pri ...

  5. Hadoop入门学习笔记(二)

    Yarn学习 YARN简介 YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度 YARN功能说明 资源管理系统:集群的硬件资源,和程序运行相关,比如内存.CPU等. 调度平 ...

  6. 素性测试+PollardRho

    素数判定 暴力 本质上是检查其是否能够不用其本身进行质因数分解. 直接枚举从区间 \([2,n)\) 的数看其是否整除 \(n\) 即可.但是其实发现我们只要枚举到 \(\sqrt n\) 即可,复杂 ...

  7. ZJOI2020

    [ZJOI2015] 地震后的幻想乡 给定一个无向图 \(G\) ,\(n\) 个点 \(m\) 条边每条边权为 \([0,1]\) 的随机实数,求这张图的最小生成树的最大边权期望. \(1\le n ...

  8. Dubbo本地存根是什么,Dubbo本地伪装又是什么?

    真正的大师永远怀着一颗学徒的心 哈喽!大家好,我是小奇,一位程序员界的学徒 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 前言 书接上回,昨天打了 ...

  9. 打字速度单位WPM、KPM定义与计算方法

    国际通行的打字速度单位是WPM,用来量度打字速度的快慢.另外还有相关的KPM.CPM.KPH等打字速度单位,下面一一介绍. ----WPM------------------------------- ...

  10. JavaScript中用画布canvans做贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...