您的位置:首页 > 数据库 > Redis

nginx+Redis+tomcat实现session共享的过程

2017-01-30 00:00 399 查看
一 前言

nginx 的upstream支持的策略有如下几种

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

使用ip_hash可以不用考虑session共享问题(每个ip会固定访问一个tomcat,无需session共享)

本文演示的例子是使用的轮询(默认)策略。

关于如何在liunx上安装nginx,redis,jdk以及部署两个或者多个tomcat等,可以参考其他博客(当然,当您搜索如何用nginx 共享session的时候,相信您前面的步奏都做了),言归正传

二 nginx+Redis+tomcat实现session共享

1 配置 nginx 的配置文件



2 上传jar包到tomcat的lib文件下



3 修改两tomcat的context.xml:

<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="10.10.49.20"
port="6379"
database="0"
maxInactiveInterval="60" />
</Context>

4 部署项目到tomcat中进行测试

其中jsp页面代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
从session中获取user的信息<%=session.getAttribute("user")%> <br/>
响应的tomcat为<%=request.getAttribute("url")%><br/>
sessionid 为: <%=session.getId()%><br/>
<br>
请多次刷新本页观察结果
</body>
</html>

结果如下图:









附:

1 jar包下载地址 (tomcat7,jdk7)http://download.csdn.net/detail/changheluorivs/9745499

2 测试项目源码下载http://download.csdn.net/detail/changheluorivs/9745500

参考博客http://blog.csdn.net/qinxcb/article/details/42041023
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: