由于tomcat使用的为集群, 通过nginx访问时轮询不同的tomcat, 使得session无法统一, 所以将session单独抽取出来做共享session.

此tomcat版本为 7.0.61.tar.gz  刚开始用7.0.75对他来说版本太高了, 一直包异常!!!!!!

首先打开两台tomcat, 使用nginx进行反向代理, 修改 CATALINA_HOME/conf/server.xml

#tocmat01中配置
<Engine name="Ca.." def.. jvmRoute="tomcat1">
#tomcat02中配置
<Engine name="Ca.." def.. jvmRoute="tomcat2">
#tomcat03中配置
<Engine name="Ca.." def.. jvmRoute="tomcat3">

此时通过页面取值

<html lang="en">
<h1>tomcat_01</h1>
sessionId: <%=session.getId()%>
sessionIP: <%=request.getServerName()%>
</html>

可在浏览器中看到sessionId的变化

关于session共享有四种方案

1), tomcat广播, 对系统资源占用较大, 占用io流, 不推荐使用

2), 使用memcache

3), 使用redis, 安装第三方库,

4), 使用tengine的cookie一致性解决

本文只讲后面三种方式

2, 使用memcached作为session管理

2.1) 安装memcached

yum -y install memcached

2.2) 测试memcached是否安装成功, 使用telnet, 没有的话yum安装

telnet localhost 

会显示:

然后:

set abc

出现STORED表示memcached安装成功

2.3) tomcat下安装jar, 拷贝到 CATALINA_HOME/lib 目录下,

  

2.4) 更改tomcat配置

vim ./conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.208.102:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
sequestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

之后启动tomcat, 既可以看到sessionID已经不变了

3, 使用redis解决session一致性问题

配置和memcached基本类似

3.1) 安装redis

yum install redis

启动

service redis start

3.2) 修改reids.conf 中的 bind, 否则只能使用localhost访问

vim /etc/redis.conf

bind 192.168.208.102

3.3), 在 CATALINA_HOME/conf/context.xml 中添加配置

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.208.102"
port=""
database=""
maxInactiveInterval="" />

3.4) 将redis和tomcat的session-manager jar包导入

此时启动tomcat, 就可以完成session一致性问题了

4, 使用tengine的会话保持功能实现

tengine提供了cookie保持功能, 即客户端访问一台服务器后, 始终指向该台服务器, 相当于粘滞功能

fallback: 服务挂了是否访问其他机器

domain: 访问域名, 默认不配置

path; cookie路径, 默认不配置

此种情况, 分配的那台tomcat挂了以后, 就不能狗保持回话一致了, 因此并不为一种可靠的解决方案.

需要浏览器开启cookie, 才可以使用

此外, 使用memcached或redis时, 如果不想安装插件, 可在代码中直接操作缓存来存储和取出数据, 相当于session, 为一种比较可靠的一致性解决方案

系列来自尚学堂极限班

6-nginx-会话一致性解决(sesion一致)的更多相关文章

  1. 【转】ora-00031:session marked for kill(标记要终止的会话)解决方法

    今天碰到一个问题,有一张表不能操作,很可能是被锁了,首先想到的是kill session,于是执行了下列的脚本找到是哪个session有问题: select object_name, machine, ...

  2. [ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 丢失问题

    使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...

  3. nginx反向代理-解决前端跨域问题

    1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...

  4. Nginx会话保持之nginx-sticky-module模块

    Nginx会话保持之nginx-sticky-module模块 - 天行健,君子以自强不息:地势坤,君子以厚德载物. - CSDN博客https://blog.csdn.net/huangjinjin ...

  5. [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题

    转:http://blog.csdn.net/zhengwish/article/details/51602059 通过设置nginx的client_max_body_size解决nginx+php上 ...

  6. 返回xml过长时被nginx截断的解决办法

    返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...

  7. nginx会话保持之sticky模块

    nginx会话保持之nginx-sticky-module模块 在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:1.ip hash,根据客户端的IP,将请求分配到不同的服务器上:2.cooki ...

  8. 项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端跨域问题

    一.xftp无法连接服务器 在xftp中配置正确的ip,用户名和密码后,居然无法连接 解决方案:将协议里面的FTP换成SFTP,注意换成SFTP后端口就默认换成22,要还是原来的21就还是连不上的哈 ...

  9. 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题

    通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题:用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_si ...

随机推荐

  1. HDU 3455 Leap Frog 2016-09-12 16:34 43人阅读 评论(0) 收藏

    Leap Frog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. hdu2041

    题目 这道题以前也看到过,但是没有写出来,我刚开始以为用循环遍历一边就可以了,结果我错了,没想到是用的斐波拉契推出来的,用的是递推的思想. 站在楼梯的第n级想一下,前一步是从哪里来的,问题就清楚了. ...

  3. hdu 4957 贪心破木桶接水大trick

    http://acm.hdu.edu.cn/showproblem.php?pid=4957 拿n只破的木桶去接水,每只木桶漏水速度为a[i],最后要得到b[i]单位的水,自来水的出水速度为V,木桶里 ...

  4. POJ1062不错的题——spfa倒向建图——枚举等级限制

    POJ1062 虽然是中文题目但是还是有一定几率都不准题目意思的:1.所有可能降价的措施不是降价多少钱而是降至多少钱2.等级范围:是你所走的那一条路中所有人中最好最低等级差不允许超过limit限制 思 ...

  5. 日期函数、时间函数总结(MySQL 5.X)

    一.MySQL 获得当前日期时间 函数1.1 获得当前日期+时间(date + time)函数:now()mysql> select now(); +---------------------+ ...

  6. L-BFGS

    L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源.本文主要通过对于无约束最优化问题的一些常用算法总结,一 ...

  7. Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性

    在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...

  8. NETSDK1061错误解决

    NETSDK1061错误解决 在vs生成和运行都正常,发布的时候报错 .netcore控制台项目引用另一个类库 错误信息 NETSDK1061: 项目是使用 Microsoft.NETCore.App ...

  9. 在Windows安装Reids 详解

    今天安装了redis,记录点经验 因为Redis项目没有正式支持Windows. 但Microsoft开发和维护一个针对Windows 64版的redis. 下载地址在微软的GitHub上,地址:ht ...

  10. Flask系列03--Flask的路由 app.route中的参数, 动态参数路由

    Flask–路由 添加路由的两种方式 第一种 @app.route("/my_de") def detail() 第二种(了解即可) app.add_url_rule(" ...