nginx redis tomcat 分布式web应用 session共享

  目标:多台tomcat 使用redis实现共享session。redis的安装请参阅:centos上安装redis

  nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式web server集群部署后需要实现session共享,本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。

  

   首先你需要一台机器上安装过如下软件,并进行了如下配置:

   Version  Port
 nginx  1.8  80
 tomcat_1  7.0.64  8080
 tomcat_2  7.0.64  8090
 redis  2.8.19  6379

另外需要将一些jar添加到两个tomcat lib 目录,tomcat lib 增加过jar后截图如下(点击下载全部jar):

两台tomcat的conf下context.xml文件修改如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

	<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
      <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
           host="localhost"
           port="6379"
           database="0"
           maxInactiveInterval="60" />

</Context>

 

我们还需要给nginx配置文件中增加轮询机制,配置文件如下:

upstream site {  
	server localhost:8080; 
	server localhost:9080; 
}


server {
    listen       80 default_server;
    server_name 你的域名;


    location / {
		index  index_tel.jsp index.jsp index.html index.htm ;  
		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;    
		client_max_body_size    10m;    
		client_body_buffer_size 128k;    
		proxy_buffers           32 4k;  
		proxy_connect_timeout   3;    
		proxy_send_timeout      30;    
		proxy_read_timeout      30;   
		proxy_pass http://site; 
	}
}

 最后我们进行测试,往tomcat1 ROOT下放个a.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试session同步</title>
</head>
<body>
这是tomcat 8080,当前sessionId:<%=session.getId()%>
<%
  session.setAttribute("name","我的博客");
%>
</body>
</html>

 往tomcat1 ROOT下放个a.jsp,但内容不同:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试session同步</title>
</head>
<body>
这是tomcat 8090,当前sessionId:<%=session.getId()%>

从session中取name:
<%=session.getAttribute("name")%>
</body>
</html>

 最后我们重启两个tomcat,nginx。然后访问http://你的域名/a.jsp,会看到会切换到不同的tomcat下,但是sessionid相同,并且都可以在session中取到name这个属性的值。

下面是我的截图:

 

posted @ 2015-09-12 17:45  沙琪玛  阅读(1149)  评论(1编辑  收藏  举报