CentOS7 下 Nginx + Tomcat 实现 Session 共享

Posted DarkFuture

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS7 下 Nginx + Tomcat 实现 Session 共享相关的知识,希望对你有一定的参考价值。

  在之情的文章中搭建的 centos7 + tomcat + nginx 的环境的基础上, 使用 redis 实现 tomcat 的 session 共享的问题。

一 : 安装 Redis

  安装 gcc:
  yum install -y gcc-c++

  使用 FTP 服务器上传安装包,解压上传的 redis 的包
  tar -zxvf redis-3.0.0.tar.gz

  进入解压目录 redis-3.0.0 执行
  make PREFIX=/usr/local/redis install

  把 redis-3.0.0 目录下的 redis.conf 文件 cp 到 /usr/local/redis 中

  启动 /usr/local/redis 目录下 执行
  ./bin/redis-server ./redis.conf

  修改 /usr/local/redis 目录下的 redis.conf
  daemonize no ----> 改成 yes 也就是后端启动


  关闭 /usr/local/redis 目录下 执行
  ./bin/redis-cli shutdown


二 : redis + tomcat 实现 session 共享

  首先,需要在 tomcat 的安装目录下的 lib 目录下添加以下三个 jar 包  (!!关于 jar 包, 可能会出现 jar 包冲突的问题, 参考 https://github.com/izerui/tomcat-redis-session-manager )
  commons-pool2-2.2.jar
  jedis-2.5.2.jar
  tomcat-redis-session-manager-2.0.0.jar

  

 

  然后修改在 tomcat 的安装目录下的 conf 目录里的 context.xml 文件
  在 <Context> 节点中, 添加以下内容:

1   <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
2   <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
3   host="192.168.191.2"
4   port="6379"
5   database="0"
6   maxInactiveInterval="60" />

  

 

  注意 注意 注意 : Valve 而不是 Value (被这个低级错误坑了一天了)

  关闭所有的 tomcat , nginx ,redis, 重启 redis (先开启 redis , 不然会报错), 重启 nginx 和 tomcat, 访问 tomcat 时就能看到 session 不变了

  

 

  最后是用 RedisDesktopManager 查看存入 redis 的 session 数据

  

  简单的一点总结: 在实现 session 共享的功能的时候在 context.xml 文件的配置中,由于把 Valve 看成 Value, 然后 tomcat 启动一直报错 fail to start component RedisSessionManager, 以为是 jar 包冲突的问题, 花了一天的时间发现 context.xml 文件的配置错了。以后配置服务器文件的时候一定要细心细心再细心, 被低级的错误困扰一天, 就当教训了,努力学习吧!

  

  

以上是关于CentOS7 下 Nginx + Tomcat 实现 Session 共享的主要内容,如果未能解决你的问题,请参考以下文章

nginx+tomcat实现负载均衡以及session共享(linux centos7环境)

centos7安装jdk+tomcat+nginx+mysql

Centos7下Nginx+Tomcat配置反向代理,使用memcached解决session一致性问题

Centos7下Nginx+Tomcat配置反向代理,使用redis解决session一致性问题

centos7+nginx负载均衡Tomcat服务

centos7+nginx+php+mysql怎样实现session会话