Nginx 解决Session共享问题的简单demo(Centos7)


1. 准备工作

2. Tomcat 配置
  • Tomcat配置
  • 这里只叙述部分配置,创建两个Tomcat部分不会细说,可以参照上方链接内容

  • 分别在opt目录下创建两个文件夹,名称分别为 tomcat8080、tomcat8081,将下载好的 Tomcat 安装包分别拷贝至两个文件下,解压,命令:tar -zxvf xxxx

  • 修改 tomcat8081 中的 Tomcat 服务器端口配置,这里设置为8081,注意,这里需要设置两/三个端口,其中有一个被注释掉了,分别为Server portConnector port

    vim /opt/tomcat8081/apache-tomcat-9.0.31/conf/server.xml
    

  • 在本机创建文件:index.jsp,右键编辑,复制下方代码

    • 分别在两个 Tomcat 服务器目录下的 webapp 文件夹下创建子文件夹edu,名字可以自定义,但访问时访问路径也应当随之改变。
    • 将制作好的 index.jsp,通过远程访问工具 (xftp) 分别复制到两个Tomcat服务器的 /webapp/edu 目录下
    • 注意:两个tomcat的页面名称和路径必须保持完全一致
    <%@ 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>tomcat2</title>  
      </head>  
      <body>  
            SessionID:<%=session.getId()%>  
            <BR>  
            当前时间为:<%=date%>  
            <BR>  
            SessionPort:<%=request.getServerPort()%>  
            <BR>  
            mzd的值为:<%=session.getAttribute("mzd")%>  
           <BR>  
            <%  
            out.println("这是tomcat1  8080"); 
            // out.println("这是tomcat2  8081"); 
            %> 
      </body>  
    </html> 
    

  • 下载统一管理工具下载地址
    • 我这里使用到2.0.4版本 tomcat-redis-session-manager
    • 下载到本地,解压,不要有中文路径
    • 进入文件夹下的 conf 子文件夹,修改配置文件redis-data-cache.properties,将其中的redis.hosts属性修改为 Redis 运行的虚拟机的IP地址
    • 将 lib 文件夹下的四个Jar包分别拷贝到 Tomcat8080 和 Tomcat8081 服务器的 lib 文件夹下
    • 将刚刚修改的redis-data-cache.properties分别复制到 Tomcat8080 和 Tomcat8081下 conf 文件夹下

  • 修改Tomcat8080 和 Tomcat8081 的配置文件
    • 分别进入到两个服务器目录下的 conf 目录

    • 修改 context.xml 配置文件,分别添加下列字段
      vim /opt/tomcat808x/apache-tomcat-9.0.31/conf/context.xml

      <Valve className="tomcat.request.session.redis.SessionHandlerValve"/>
      <Manager className="tomcat.request.session.redis.SessionManager"/>
      
    • 注意:因为tomcat-redis-session-manager这个版本的不同,classname会随着变化,2.0.4的版本是叫这两个。

    • 可以解压下载的tomcat-redis-session-manager中的lib文件夹的tomcat-cluster-redis-session-manager.jar ,具体的名字随版本可能会有所改变,只需和上方配置文件的名称相同即可


  • 【分别启动两台tomcat】

    
    cd /opt/tomcat8081/apache-tomcat-9.0.31/bin
    ./startup.sh
    
    ## tomcat8080 方法相同
    
    ## 检查是否启动成功
    ps -ef | grep tomcat
    
    

3. Nginx 配置
  • 进入到Nginx的配置文件目录下,修改nginx.conf 文件

  • Nginx的配置文件比必在这里,如果不存在,则Nginx安装失败,可以参照最上方Nginx安装

  • vim /usr/local/nginx/conf/nginx.conf

    		http{
    			
    			....
    	
    			upstream myserver{
    				# 端口号分别与Tomcat服务器设置的port对应
    		        server 192.166.xxx.xxx:8080;
    		        server 192.166.xxx.xxx:8081;
    		    }
    		    
    		    server {
    	        listen       80;
    	        server_name  192.168.xxx.xxx; #当前虚拟机IP地址
    	
    	        location / {
    	            proxy_pass http://myserver;
    	            root   html;
    	            index  index.html index.htm;
    	        }
    		}
    
  • 重新(启动)加载Nginx

    • 当前位置也是唯一的
    cd /usr/local/nginx/sbin
    
    ./nginx -s reload
    
    ./nginx
    

4. 验证
  • 浏览器输入虚拟机地址,访问刚刚创建好的 index.jsp 路径
  • 192.168.xxx.xxx/edu/index.jsp
  • 此时,虽然已经配置了负载均衡,使用轮询策略,每次访问的tomcat不一致,但页面的SessionID不会发生变化。
  • 查看redis,其中会有一个 KEY-VALUE 键值对
  • 这里,可能会出现多次访问同一个tomcat的问题,并不是配置文件有问题,个人认为是浏览器缓存问题,可以每次点解地址栏回车,手动访问即可解决
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值