6-nginx-会话一致性解决(sesion一致)
由于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一致)的更多相关文章
- 【转】ora-00031:session marked for kill(标记要终止的会话)解决方法
今天碰到一个问题,有一张表不能操作,很可能是被锁了,首先想到的是kill session,于是执行了下列的脚本找到是哪个session有问题: select object_name, machine, ...
- [ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 丢失问题
使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...
- nginx反向代理-解决前端跨域问题
1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...
- Nginx会话保持之nginx-sticky-module模块
Nginx会话保持之nginx-sticky-module模块 - 天行健,君子以自强不息:地势坤,君子以厚德载物. - CSDN博客https://blog.csdn.net/huangjinjin ...
- [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
转:http://blog.csdn.net/zhengwish/article/details/51602059 通过设置nginx的client_max_body_size解决nginx+php上 ...
- 返回xml过长时被nginx截断的解决办法
返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...
- nginx会话保持之sticky模块
nginx会话保持之nginx-sticky-module模块 在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:1.ip hash,根据客户端的IP,将请求分配到不同的服务器上:2.cooki ...
- 项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端跨域问题
一.xftp无法连接服务器 在xftp中配置正确的ip,用户名和密码后,居然无法连接 解决方案:将协议里面的FTP换成SFTP,注意换成SFTP后端口就默认换成22,要还是原来的21就还是连不上的哈 ...
- 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题:用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_si ...
随机推荐
- muduo网络库学习之MutexLock类、MutexLockGuard类、Condition类、CountDownLatch类封装中的知识点
一.MutexLock 类 class MutexLock : boost::noncopyable 二.MutexLockGuard类 class MutexLockGuard : bo ...
- 切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- Jersey构建Restful风格的Webserivces(三)
一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...
- sklearn使用小记GridSearchCV
def test_grid_search(): from sklearn import datasets,svm iris = datasets.load_iris() parameters = {' ...
- Team Foundation Server (TFS) 2017 团队资源管理器
在千呼万唤中,TFS 2017团队资源管理器终于发布了,对于所有TFS系统的用户,都是一个天大的喜讯,尤其是对于不经常做.NET开发的团队成员. 大家都知道,伴随TFS 2013(和之前的版本)的发布 ...
- day103 跨域请求 与频率访问限制.
目录 一.跨域请求 二.频率访问限制 一 .同一个域下的ajax请求访问 url文件 from django.conf.urls import url from django.contrib imp ...
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'img' at row 1故障
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'img' at ro ...
- 201621123018《Java程序设计》第2周学习报告
Week02-Java基本语法与类库 1.本周学习总结 Java数据类型分为基本数据类型和引用数据类型.布尔型是Java特有的数据类型.本周重点学习了字符串类型String,String类型中==和e ...
- LiLicense server OR Activation code
JET BRAINS系列工具下载地址: https://www.jetbrains.com/products.html?fromMenu License server 输入下列两个任何一个点击 Act ...
- window / Linux 下 Golang 开发环境的配置
一直专注于使用python语言进行程序开发,但是却又一直被它的性能问题所困扰,直到遇到了天生支持高并发的Golang,这似乎也成了学习go语言最理所当然的理由.下面介绍下Go语言开发环境搭建的步骤: ...