Nginx Session Sticky
nginx的粘性session主要通过nginx-sticky-module实现
1 下载 nginx-sticky-module
下载地址:https://code.google.com/p/nginx-sticky-module/downloads/list
官方文档:https://code.google.com/p/nginx-sticky-module/wiki/Documentation
2 安装
解压nginx-sticky-module到/usr/local
tar -xzf nginx-sticky-module-1.1.tar.gz
进入 nginx 源码目录/usr/local/nginx-1.6.2,执行命令,重新编译:
./configure ... --add-module=../nginx-sticky-module-1.1
make
make install
3 make报错
make的时候可能由于高版本的原因会出现以下错误:
make[1]: *** [objs/addon/nginx-sticky-module-1.1/ngx_http_sticky_misc.o] Error 1 make[1]: Leaving directory `/usr/local/nginx-1.6.2' make: *** [build] Error 2
解决方法:
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);
4 sticky使用
upstream 172.16.0.16 {
sticky;
server 172.16.0.17:8180;
server 172.16.0.17:8280;
server 172.16.0.18:8180;
server 172.16.0.18:8280;
}
sticky支持的参数:sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以为任何的string字符,默认是route domain:哪些域名下可以使用这个cookie path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡 expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。 no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用。
如下:
sticky name=routeID expires=1h domain=.test.com path=/;