nginx+Tomcat反向代理实现session会话保持

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+Tomcat反向代理实现session会话保持相关的知识,希望对你有一定的参考价值。

环境:
nginx+tomcat
一台nginx:192.168.2.198
一台tomcat1:192.168.2.197
一台tomcat2:192.168.2.199

一、Tomcat上操作(2台机器相同操作)
1、jdk安装
2、tomcat安装
3、配置path环境变量
4、启动tomcat
5、创建测试页面并测试页面
[[email protected] conf]#vi /usr/local/tomcat_a/webapps/test/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">TomcatA.linuxinfo.top</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<% session.setAttribute("linuxinfo.top","linuxinfo.top");%>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
6、访问192.168.2.197,测试如下,查看session ID
技术分享图片
访问192.168.2.199,测试如下,查看session ID
技术分享图片

二、基于tomcat群集配置session会话保持
1、编辑vi server.xml ,在Engine字段中添加如下代码,开启群集服务
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> #jvmRoute表示唯一表示本机,所以不同主机的是不同的。这个参数非必须
<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.10.0.4" port="45564" frequency="500" dropTime="3000"/> #多播地址应该是224~239,同一组里的多播地址相同
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.2.197" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> #address为本机能够向外通信的地址
<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"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
2、编辑web.xml
vim /usr/local/tomcat/conf/web.xml 给应用程序加<distributable/>标签,使其能够实现复制。在web-app字段加 <distributable/>。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<distributable/> #在配置文件的末尾第二行添加即可。
</web-app>
将web.xml放在对应的项目目录下:
mkdir /usr/local/tomcat/webapps/test/WEB-INF
cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/
重启服务:catalina.sh stop
catalina.sh start
如果不能启动,查看日志logs/catalina.out信息如下(不能加入到组播) :blob.png
那么添加到达组播的路由即可:route add -host 228.10.0.4 dev ens33

三、配置nginx负载均衡
vi /usr/local/nginx/conf/nginx.conf
upstream tomcat{
server 192.168.2.197:8080;
server 192.168.2.199:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat
}
}

以上是关于nginx+Tomcat反向代理实现session会话保持的主要内容,如果未能解决你的问题,请参考以下文章

通过Nginx+tomcat+redis实现反向代理 负载均衡及session同步

Redis+Tomcat实现session绑定

windows系统下配置Nginx反向代理多tomcat共享session

nginx配置反向代理支持session

Centos7下Nginx+Tomcat配置反向代理,使用memcached解决session一致性问题

Centos7下Nginx+Tomcat配置反向代理,使用redis解决session一致性问题