nginx+tomcat+redis 解决session丢失

个人git: https://gitee.com/hhlhhl/NginxDemo/blob/master/README.md

方法一:tomcat-cluster-redis-session-manager解决session共享问题

版本: apache-tomcat-8.5、nginx-1.8、redis_3.2.1

实现:

1、下载: https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wiki

jedis.jar
commons-pool2.jar
commons-logging.jar
tomcat-cluster-redis-session-manager-2.0.4.jar

2、解压之后。将jar包放入tomcat的lib中(注意是tomcat/lib中)

3、配置解压之后的redis-data-cache.properties(根据你的redis配置)。配置完将这个文件放入tomcat/conf文件夹中。

4、配置tomcat/conf/context.xml(中间加入),增加如下两行。

<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager"
     host="localhost"
     port="6379"
     database="0"
     password="123456"
     maxInactiveInterval="60"/>

测试:

1、nginx配置 nginx/conf/nginx.conf文件加入以下配置。

upstream myServer {
     server 192.168.6.86:8887 weight=1;
     server 192.168.6.86:8888 weight=1;
     #server 192.168.6.34:8916 weight=1;
     #server 192.168.6.34:2025 weight=1;
}


server {
     listen      80;
     server_name localhost;
    
     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;
        
        #server_name_in_redirect on;
        #port_in_redirect off;
        proxy_pass http://myServer;
     }
}

2、准备两个tomcat,一个端口为8887,一个为8888

3、两个tomcat中jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%  
  request.getSession().setAttribute("name","hhl");
  SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
  String date=simpleDateFormat.format(new Date());
%>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>   
    <title>tomcat8888</title>  
  </head>  
  <body>  
    SessionID:<%=session.getId()%>  
    <BR>  
        当前时间为:<%=date%>  
    <BR>  
    SessionPort:<%=request.getServerPort()%>  
    <BR>  
    name的值为:<%=session.getAttribute("name")%>  
    <BR>  
    <%  
    out.println("这是tomcat8888");  
    %> 
  </body>  
</html>



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%  
  SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
   String date=simpleDateFormat.format(new Date());
%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>   
      <title>tomcat8887</title>  
  </head>  
  <body>  
    SessionID:<%=session.getId()%>  
    <BR>  
    当前时间为:<%=date%>  
    <BR>  
    SessionPort:<%=request.getServerPort()%>  
    <BR>  
    name的值为:<%=session.getAttribute("name")%>  
   <BR>  
    <%  
    out.println("这是tomcat8887");  
    %> 
  </body>  
</html>  

4、启动两个tomcat和redis:如果不启动redis是会报错的。。。

结果: 访问 http://127.0.0.1/test/index.jsp

movie movie

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于您提到的keepalived、nginxtomcatredis和mysql,这些是常用于构建高可用和负载均衡的Web应用架构的关键组件。 1. Keepalived:Keepalived是一种开源的高可用解决方案,可以提供IP地址和服务的故障转移。它通常与负载均衡器(如Nginx)一起使用,以确保当主服务器故障时,备份服务器可以接管服务。 2. NginxNginx是一款高性能的开源Web服务器和反向代理服务器。它可以作为负载均衡器,在多个后端服务器(如TomcatRedis和MySQL)之间分发请求,并提供静态文件的高效传输。 3. TomcatTomcat是Java Servlet容器,用于部署和运行Java Web应用程序。它可以作为应用服务器与Nginx配合使用,通过反向代理将请求分发到多个Tomcat实例,以实现负载均衡和高可用性。 4. RedisRedis是一种基于内存的开源键值存储数据库,被广泛用于缓存、会话存储和消息队列等场景。在Web应用架构中,Redis可以作为缓存层,提高数据读取速度,并减轻后端数据库(如MySQL)的负载。 5. MySQL:MySQL是一种流行的开源关系型数据库管理系统,常用于存储应用程序的持久化数据。它可以与Tomcat结合使用,作为后端数据库存储和管理数据。 以上是对keepalived、nginxtomcatredis和mysql的简要介绍,它们在Web应用架构中扮演着不同的角色,以提供高可用、高性能和负载均衡的服务。如果您对其中任何一个组件有更具体的问题,我很乐意为您解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值