一.环境准备(windows下nginx+tomcat,linux同理)
1.nginx一台
2.tomcat 2台(端口号不同,我这里是8081和8082)
3.web项目一个(我这里项目名tomcat-session)
二.详细配置
1.nginx
在nginx的conf文件下找到nginx.conf将以下位置改成
image.png
2.tomcat
在tomcat的conf文件夹下找到server.xml配置文件进行端口配置(此处2台tomcat 分别是8081和8082)和集群配置。
找到Engine标签
image.png
在下面添加如下代码
image.png
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<!-- <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> -->
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
3.web项目(tomcat-session)
3.1在2台tomcat web项目的web.xml中加入此属性
image.png
3.2在2台tomcat web项目中index.jsp页面中加入如下代码
项目1:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() +"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<title>111</title>
</head>
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 1111");
%>
</body>
</html>
项目2:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() +"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<title>111</title>
</head>
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 2222");
%>
</body>
</html>
3.3 添加虚拟路径(此处注意必须要加,因为在ngnix中配置轮训时是通过ip+端口号访问的)
image.png
三.开始访问
使用nginx配置中的server_name 端口号默认80进行访问即:localhost
项目1:
image.png
项目2
image.png
从图中可以看出项目1和项目2的sessionID是相同的,因此tomcat的session复制到此完成。
四.参考文章
http://blog.csdn.net/fengwind1/article/details/52163096
http://blog.csdn.net/kkgbn/article/details/52192218