Nginx以前对session 保持支持不太好,主要采用ip_hash把同一来源的客户(同一C段的IP)固定指向后端的同一台机器,ip_hash有个缺点是不能实现很好的负载均衡;直到nginx的扩展模块nginx-sticky-module的出现,解决了session sticky的问题。
基本的原理:
首先根据轮询RR随机到某台后端,然后在响应的Set-Cookie上加上route=md5(upstream)字段,第二次请求再处理的时候,发现有route字段,直接导向原来的那个节点。
配置说明:
upstream cluster_test {
sticky[name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1][no_fallback];
server 192.168.100.209:80;
server 192.168.100.225:80;
}
name: 可以为任何的string字符,默认是route
domain:哪些域名下可以使用这个cookie
path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡
expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用。
Nginx编译
添加nginx_upstream_check_module
unzipnginx_upstream_check_module-master.zip
tar -zxf nginx-1.5.6.tar.gz
cd nginx-1.5.6
patch -p1 <../nginx_upstream_check_module-master/check_1.2.6+.patch
添加nginx-sticky-module,编译安装Nginx
tar -xzf nginx-sticky-module-1.1.tar.gz
cd nginx-1.5.6
./configure--prefix=/opt/lsmp/3rdparty/nginx/1.5.6 --with-http_stub_status_module--with-http_ssl_module --with-openssl=../openssl-1.0.1c--with-http_realip_module --add-module=../nginx-sticky-module-1.1--add-module=../nginx_upstream_check_module-master
make
make install
注意事项
nginx-1.5.x和nginx-sticky-module-1.1编译会有点问题,应该是nginx新版本没有相应的nginx-sticky-module,解决办法是把nginx-sticky-module-1.1/ngx_http_sticky_misc.c的281行修改为:
digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in), digest->data, len, 1);
由于编译需要,编译安装Nginx之前,要先安装openssl
nginx-sticky-module的cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
相关推荐
包括nginx-1.10.3.tar.gz、nginx-sticky-module-1.1.tar.gz、zlib-1.2.8.tar.gz、openssl-1.0.1c.tar.gz、pcre-8.21.tar.gz以及按照过程可能的错误解决发法
本文档主要是记录了自己在进行负载均衡及SESSION同步的测试。利用nginx的反向代理做负载均衡,利用sql server数据库做session共享。达到网站集群在负载均衡时,session可以同步。
nginx+iis+redis搭建的站点来解决session一致性的解决方案.docx
分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用 redis 服务器进行...
nginx+tomcat7+session共享 kryo序列化所需要包 1.将上面所提到的包全部拷贝到tomcat的lib下(三台tomcat都需要) 2.修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码...
nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 # ./configure --prefix=/usr/nginx-0.8.1 --with-...
nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 # ./configure --prefix=/usr/nginx-0.8.1 --with-...
nginx反向代理负载均衡和session会话保持详细配置,附带必须软件包,nginx-sticky-module-1.1,nginx_upstream1.1,pcre-8.35, nginx-1.6.0, nginx_upstream_check_module-master
项目说明 一个分布式Java Web Session。基于filter机制。...则nginx最好配置为sticky session。推荐淘宝的tengine 的session sticky模块: 或者这个项目: 因为后端的Session共享存储并不能锁住sessionId对应的ke
(1) session sticky(贴) 基于hash 和cookie 来实现会话保持,简单的负载均衡算法 基于source_ip(源地址hash) nginx: ip_hash 、 haproxy: source 、 lvs: sh (2) session cluster:delta session manager ...
名称 nginx_mod_cluster_module-基于原始mod_cluster,将功能mod_cluster实现为nginx。 可用于在nginx上动态配置路由/路径。 髋关节置换剂。...- Sticky session based on URL param 工作功能: -
-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- memcachedNodes="n1:127.0.0.1:11211" username="root" password="" sticky="false" sessionBackupAsync=...
worker.controller.sticky_session=1 5 修改tomcat的端口号(3处) 改为: 改为: 改为: 注意:该处需要与worker.tomcat2.port=9009对应 6 修改jvmRoute 备注与...