Nginx + Tomcat7 + redis session一致性问题

摘要:
当Nginx执行负载平衡时,它需要每次将请求分发到不同的机器。同一用户在一台机器上创建会话,下一个请求可能会转发到另一台机器,这将导致会话丢失。我们可以使用Redis保存会话。具体步骤如下:1https://files.cnblogs.com/files/langfanyun/redislib.7z下载并解压后,将jar包放在Tomcat的lib目录中;2.编辑conf/context。xml文件,并添加以下配置:其中host是Redis的服务器地址。它显示您实际访问了不同的Tomcat应用程序。

        Nginx 作负载均衡时,由于是每次都需要把请求分发到不同的机器,同一个用户在一台机器上创建了 session,下一次的请求很有可能会转发到另外一台机器,会造成 session 丢失。我们可以使用 Redis 来保存 session。具体步骤如下:

1.  https://files.cnblogs.com/files/langfanyun/redislib.7z  下载解压后,把 jar 包都放在Tomcat 的 lib 目录下;

2. 编辑 Tomcat下的 conf/context.xml 文件,加入如下配置:

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
        host="192.168.137.47"
        port="6379"
        database="0"
        maxInactiveInterval="60" />

   其中 host 为 Redis 的服务器地址。

3. 修改 Tomcat 下的 conf/server.xml 文件,在 <Engine>节点添加 jvmRoute 属性,不同机器上的Tomcat 设置不同的值:

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

4. 修改 Tomcat 下的 webapps/ROOT/ 下的 index.jsp 文件,把<body>里的内容改成如下。不同机器上的此文件,添加一些不同的值,以区分不同的机器。

<body>
        SessionID: <%=session.getId()%><br/>
        SessionIP: <%=request.getServerName()%><br>
        tomcat1
    </body>

5. 启动 Redis 服务器和各个 Tomcat,访问时,多刷新几次,可以看到 sessionID 的值一样,但是其它内容不一样。说明实际上是访问了不同的 Tomcat 下的应用 。

免责声明:文章转载自《Nginx + Tomcat7 + redis session一致性问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MYSQL安装报错 -- 出现Failed to find valid data directory.基于QRcode创建和识别二维码的研究下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

logstash收集日志并写入Redis再到es集群

redis做数据缓存 图形架构: 环境准备 172.31.2.101 es1 + kibana 172.31.2.102 es2 172.31.2.103 es3 172.31.2.104 logstash1 172.31.2.105 logstash2 172.31.2.106 Redis 172.31.2.107 web1 安装redis [roo...

2019 迅雷java面试笔试题 (含面试题解析)

本人3年开发经验、18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、迅雷等公司offer,岗位是Java后端开发,最终选择去了迅雷。面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在迅雷也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所...

springboot SFTP 文件上传下载功能

新增sftp.properies 文件保存 sftp服务器信息 # 协议 sftp.client.protocol=sftp # ip地址 sftp.client.host=改成自己的文件服务器地址 # 端口 sftp.client.port=22 # 用户名 sftp.client.username=root # 密码 sftp.client.passw...

Nginx使用教程(二):Nginx配置性能优化之worker配置

配置Nginx workers <br>NGINX根据指定的配置运行固定数量的工作进程。 这些工作进程负责处理所有处理。 在下面的章节中,我们将调整NGINX worker参数。 这些参数是NGINX全局上下文的一部分。 worker_processes worker_processes指令控制工作进程数: worker_processes 1...

在群晖上安装docker和docker-nginx

群晖自带的web服务中的nginx自定义程度太低,直接命令行修改配置文件会被系统还原覆盖。安装docker版nginx即可完美解决。 安装docker 直接群晖套件中心里面安装。 安装docker-nginx 在群晖web界面安装 1、群晖docker里下载nginx,选择latest。 2、下载完成后双击可进行配置创建容器,配置完成后点击启动即可...

为Nginx服务器配置黑(白)名单的防火墙

处在黑名单中的ip与网络,将无法访问web服务。 处在白名单中的ip,访问web服务时,将不受nginx所有安全模块的限制。 支持动态黑名单(需要与ngx_http_limit_req 配合) 具体详见下面的说明   文件配置方法说明   一、定义黑名单或白名单方法: 在Nginx的conf目录下面建立blockip.conf文件,把想要屏蔽的IP只要加...