nginx+redis+tomcat实现session共享的服务集群

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wx5040257/article/details/81407869

        nginx反向代理tomcat集群能够解决高并发访问的问题,然后把session统一放到redis里面,可以解决session跨项目共享的的问题,顺便还解决了经典的单点登录问题。

实验环境: centos6.5  32位系统   nginx1.10.3  tomcat7.x   redis-3.2.8,jdk1.7

所需jar包:commons-pool-1.6.jar ,  tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar  ,  jedis2.9

拓扑图如下:

这里用到的是nginx负载均衡的轮询策略。

将以下jar包放到tomcat的lib目录

commons-pool-1.6.jar ,  tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar  ,  jedis2.9

在tomcat的conf目录的context.xml文件中添加如下配置

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>
   <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
       host="192.168.68.129"    
       port="6379"
       password="test123"
       database="0"
       maxInactiveInterval="60"/>

在68.1和68.129的tomcat服务器上均做如上配置。

nginx的配置如下:

   #...
   upstream wx.com {       #配置服务集群     
      server 192.168.68.1:8080  weight=1;    #weight越大,处理请求的概率就越高
      server 192.168.68.129:8080  weight=1;
    }

    server {
        listen       80;      
        server_name  192.168.68.128;
        
      location /NginxProj {  #配置反向代理站点
           #指定反向代理的服务集群,注意wx.com是集群名称,要和upstream中的wx.com一致
           proxy_pass http://wx.com;     
           proxy_redirect off;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
   }
#....

jsp测试页面如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.net.InetAddress"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"></c:set>
<c:set var="scheme" value="${pageContext.request.scheme}"></c:set>
<c:set var="serverName" value="${pageContext.request.serverName}"></c:set>
<c:set var="serverPort" value="${pageContext.request.serverPort}"></c:set>
<c:set var="basePath" value="${scheme}://${serverName }:${serverPort }${path }/"></c:set>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="${basePath }">
    <title>nginx演示</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
</head>
<% 
    String serverIp=InetAddress.getLocalHost().getHostAddress();
	String serverInfo=application.getServerInfo();
	Properties props=System.getProperties(); //获得系统属性集    
	String osName = props.getProperty("os.name"); //操作系统名称    
	String osArch = props.getProperty("os.arch"); //操作系统构架    
	String osVersion = props.getProperty("os.version"); //操作系统版本 
%>
<body>
<h2>sessionId:<%=session.getId() %></h2>
<h2>服务器ip:<%=serverIp %></h2>
<h2>tomcat服务器信息:<%=serverInfo %></h2>
<h2>服务器操作系统名称 :<%=osName %></h2>
<h2>服务器操作系统构架 :<%=osArch %></h2>
<h2>服务器操作系统版本 :<%=osVersion %></h2>
</body>
</html>

运行结果如图:

再次刷新,服务器变了,sessionid没变,如下:

查看redis服务器上的session:

ok,实验成功了!

=====================================

如果觉得帮到了你,可以小小打赏一下,您的支持是作者源源不断的动力

猜你喜欢

转载自blog.csdn.net/wx5040257/article/details/81407869
今日推荐