如何解决Nginx的session一致性问题
1个回答
展开全部
方案一:会话保持模块,即通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器,即可解决session取不到、session不一致的问题。
方案二:Session共享(推荐使用),即服务器在分发请求到了一台机器的时候,会先去session缓存数据库查看是否有该用户的session,如果有则取出,否则新建一个。那么这个Session共享如何解决呢?共有2种方法:1、memcached缓存方案。2、Redis缓存方案。下面重点介绍session共享的问题:
1、memcached缓存方案
memcached缓存数据库是专门管理session的,memcached 缓存服务可以和tomcat整合,帮助tomcat 共享管理session。
安装memcached:
# yum –y install memcached11
启动memcached(默认端口是11211):
# service memcached start11
通过telnet测试memcached数据库
# telnet localhost 1121111
测试
set abc 0 0 5
12345
get abc
quit12341234
将memcached的jar包拷贝到tomcat的lib下,jar包的下载地址:http://download.csdn.net/detail/chenweijisun/9826940
在tomcat的server.xml中配置jvmRoute
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
1212
在tomcat的context.xml的Context配置Manager
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.17.4:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
123456789123456789
为了方便测试,index.jsp也配置下,文件在/tomcat安装目录/webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat2 page</h1>
12345671234567
测试
2、redis缓存方案
安装redis:
# yum –y install redis11
启动redis
# service redis start11
测试(redis的默认端口是6379):
# telnet localhost 637911
修改配置文件vi /etc/redis.conf,将bind的127.0.0.1修改为本机地址,否则只能本机访问了
导入redislib中三个jar包到tomcat中,jar包的下载地址:http://download.csdn.net/detail/chenweijisun/9826941
在tomcat的context.xml的Context配置Manager
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.17.4"
port="6379"
database="0"
maxInactiveInterval="60" />
方案二:Session共享(推荐使用),即服务器在分发请求到了一台机器的时候,会先去session缓存数据库查看是否有该用户的session,如果有则取出,否则新建一个。那么这个Session共享如何解决呢?共有2种方法:1、memcached缓存方案。2、Redis缓存方案。下面重点介绍session共享的问题:
1、memcached缓存方案
memcached缓存数据库是专门管理session的,memcached 缓存服务可以和tomcat整合,帮助tomcat 共享管理session。
安装memcached:
# yum –y install memcached11
启动memcached(默认端口是11211):
# service memcached start11
通过telnet测试memcached数据库
# telnet localhost 1121111
测试
set abc 0 0 5
12345
get abc
quit12341234
将memcached的jar包拷贝到tomcat的lib下,jar包的下载地址:http://download.csdn.net/detail/chenweijisun/9826940
在tomcat的server.xml中配置jvmRoute
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
1212
在tomcat的context.xml的Context配置Manager
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.17.4:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
123456789123456789
为了方便测试,index.jsp也配置下,文件在/tomcat安装目录/webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat2 page</h1>
12345671234567
测试
2、redis缓存方案
安装redis:
# yum –y install redis11
启动redis
# service redis start11
测试(redis的默认端口是6379):
# telnet localhost 637911
修改配置文件vi /etc/redis.conf,将bind的127.0.0.1修改为本机地址,否则只能本机访问了
导入redislib中三个jar包到tomcat中,jar包的下载地址:http://download.csdn.net/detail/chenweijisun/9826941
在tomcat的context.xml的Context配置Manager
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.17.4"
port="6379"
database="0"
maxInactiveInterval="60" />
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询