Nginx 会话保持

Posted

tags:

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

参考技术A nginx会话保持主要有以下几种实现方式。

ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。

ip_hash简单易用,但有如下问题:
当后端服务器宕机后,session会话丢失;
同一客户端会被转发到同一个后端服务器,可能导致负载失衡;

使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一客户端导致负载失衡的情况。(需要引入第三方模块才能实现)

sticky模块

expires:设置浏览器中保持cookie的时间
domain:定义cookie的域
path:为cookie定义路径

jvm_route的原理

nginx+tomcat会话保持

在nginx.conf中http标签内定义upstream

upstream name {                #name自定义一个名字
    server     ip1:port weight=5;
    server     ip2:port weight=5
}

在server标签内的location/中

loation /{
proxy_pass http name;        #使用upstream定义的name
proxy_set_header X-Real_IP $remote_addr;
client_max_body_size 100m;
}

对特殊目录限制权限

location ~ ^/(WEB-INF)/ {
    denny all;    
}

tomcat设置

    使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager,下面简称msm)配置Tomcat和memcached实现session共享。

首先将下面的包下载到Tomcat的lib目录下,这些包都是msm所依赖的包。

[[email protected] ~]# cd /usr/local/tomcat/lib/  
[[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar
[[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar
[[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar
[[email protected] lib]# wget http://spymemcached.googlecode.com/files/memcached-2.4.2.jar
[[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar

修改server.xml 

	 <Context docBase="/var/www/html" path="" reloadable="true">  
	 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   
		 memcachedNodes="n1:localhost:11211"   
	     requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"   
	     sessionBackupAsync="false"   
	     sessionBackupTimeout="100"   
	     transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"   
	     copyCollectionsForSerialization="false" />  
	 </Context>

这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如: 

 n1:localhost:11211 n2:localhost:11212     /localhost改为安装memcached的服务器的IP

sessionBackupTimeout的单位为分钟

/var/www/html改为Tomcat服务器web根目录的路径

修改后重启TOMCAT和nginx服务





本文出自 “庭前夜末空看雪” 博客,请务必保留此出处http://12550795.blog.51cto.com/12540795/1962761

以上是关于Nginx 会话保持的主要内容,如果未能解决你的问题,请参考以下文章

31例程启动后需要会话进行保持吗

Nginx+Tomcat+Memcached实现会话保持

nginx会话保持之sticky模块

Nginx+Tomcat+Redis实现负载均衡会话保持

Nginx+tomcat session cluster会话保持实验

nginx会话保持