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

猜你喜欢

转载自blog.csdn.net/qq_25293281/article/details/88423135