tomcat session服务器会话丢失处理

简介:

session会话保持之session服务器


实验环境:

两个tomcat节点:172.16.100.70(tomcatA.test.com),172.16.100.80(tomcatB.test.com)

两个memcached节点:172.16.100.90, 172.16.100.100

一个负载均衡节点:172.16.100.60



memcached-session-manager项目地址,http://code.google.com/p/memcached-session-manager/


下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。

memcached-session-manager-${version}.jar

memcached-session-manager-tc${6,7,8}-${version}.jar

spymemcached-${version}.jar

msm-javolution-serializer-${version}.jar   内存保持至memcache

javolution-${version}.jar



分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:


<Context path="/test" docBase="/webapps/test" reloadable="true">

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

                memcachedNodes="n1:172.16.100.9:11211,n2:172.16.100.10:11211"

                failoverNodes="n1"

                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"       transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/></Context>



分别为两个context提供测试页面:


tomcatA:

# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

# vim /usr/local/tomcat/webapps/test/index.jsp

添加如下内容:

<%@ page language="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

    <h1><font color="red">TomcatA.test.com</font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("test.com","test.com"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>



tomcatB:

# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

# vim /usr/local/tomcat/webapps/test/index.jsp

添加如下内容:

<%@ page language="java" %>

<html>

  <head><title>TomcatB</title></head>

  <body>

    <h1><font color="blue">TomcatB.test.com</font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("test.com","test.com"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>



在172.16.100.60上配置反向代理的负载均衡内容,类似如下所示:

upstream vmserver{
    server 172.16.100.70:8080;
    server 172.16.100.80:8080;

}

location / {
    add_header X-Via $upstream_addr;
    proxy_pass http://vmserver;
    index index.jsp index.html;

}



测试结果,在浏览器中访问http://172.16.100.6O/test,结果如下所示,其session ID在负载均衡环境中保持不变。


TomcatA.test.com


Session ID4DD0340CE629BAF2BBEBB2CD4CD0DDDF-n2

Created on4444890838103



TomcatB.test.com


Session ID4DD0340CE629BAF2BBEBB2CD4CD0DDDF-n2

Created on4444890838103






注意:如果你是上面所示的方法设置的Session ID显示是没问题

如果你想测试结果,能直接在浏览器中访问http://172.16.100.6O/那么nginx的设置如下

upstream vmserver{
    server 172.16.100.70:8080;
    server 172.16.100.80:8080;

}

location / {
    add_header X-Via $upstream_addr;
    proxy_pass http://vmserver;
    index index.jsp index.html;

}

这时候就涉及到会话丢失问题了。

nginx会话丢失问题



nginx代理是出现会话丢失   

proxy_cookie_path /test/ /;

proxy_cookie_path路径更换;



发生会话丢失的原因。访问的时候是/   代理到/test     

下次访问时你可以直接持http://xx/test

它的cookie就是test

但是你访问的时候是/

这时候你就需要


proxy_cookie_path /test/ /;

proxy_cookie_path路径更换;


正确设置如下:

upstream vmserver{
    server 172.16.100.70:8080;
    server 172.16.100.80:8080;

}

location / {
    add_header X-Via $upstream_addr;
    proxy_pass http://vmserver/test;

    proxy_cookie_path /test/ /;

     index index.jsp index.html;

}



本文转自 吃草的青蛙 51CTO博客,原文链接:http://blog.51cto.com/tlinux/1727348,如需转载请自行联系原作者
相关文章
|
4月前
|
XML 应用服务中间件 Linux
在一个centos服务器上同时部署tomcat,django,flask
在一个centos服务器上同时部署tomcat,django,flask
72 0
|
7天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
13天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat
|
3月前
|
安全 Java 应用服务中间件
本地部署Tomcat开源服务器并结合内网穿透远程访问
本地部署Tomcat开源服务器并结合内网穿透远程访问
40 0
|
3月前
|
存储 Java 应用服务中间件
HTTP服务器——tomcat的安装和使用
HTTP服务器——tomcat的安装和使用
|
3月前
|
缓存 负载均衡 应用服务中间件
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
在本章内容中,我们将深入探讨 Tomcat 服务器的运行架构、LVS 负载均衡的运行机制以及 Cache 缓存机制,并提供相应的解决方案和指导。通过理解这些关键概念和机制,您将能够优化您的系统架构,提高性能和可扩展性。
207 4
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
|
4月前
原生表格纵向滚动条
原生表格纵向滚动条
|
4月前
|
应用服务中间件 开发工具 Android开发
Tomcat配置虚拟路径,使上传文件与服务器分离
Tomcat配置虚拟路径,使上传文件与服务器分离
56 0
|
4月前
|
XML Java 应用服务中间件
# 如何 在同一个 服务器上同时部署 nginx 以及 tomcat
# 如何 在同一个 服务器上同时部署 nginx 以及 tomcat
79 0
|
5月前
|
应用服务中间件 容器
Tomcat的Session过期处理策略
Tomcat的Session过期处理策略
57 0