一.環境準備(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