目录
我们都知道Nginx具有负载均衡的功能,纯 ip_hash 像局域网内的访问ip访问会导致ip倾斜 ,cookie_hash服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,cookie需要浏览器支持。
Sticky就是基于cookie的一种负载均衡解决方案,它是通过基于cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。请求来了,服务器发个cookie,并说:下次来带上,直接来找我。
Sticky是nginx的一个模块,它是基于cooki e的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
如果浏览器不支持cookie,那么sticky不生效,整个模块是给予cookie实现的。
下载地址
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--add-module=/tmp/sticky-module/nginx-goodies-nginx-sticky-module-ng
make 编译的时候有可能会报错
修改:找到sticky刚刚的解压目录,进入修改文件 vim ngx_http_sticky_misc.h ,加入下面的头文件
#include
#include
nginx 启动 停止 重启命令
- /usr/local/nginx-1.9.9/sbin/nginx -s start
- /usr/local/nginx1.9.9/sbin/nginx -s stop
- /usr/local/nginx1.9.9/sbin/nginx -s reload
- upstream iphashserver {
-
- sticky;
- server www.test.com:8001;
- server www.test.com:8002;
-
- }
具体可以附加参数如下:
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly];
参数信息说明:
[name=route] 设置用来记录会话的cookie名称 [domain=.foo.bar] 设置cookie作用的域名 [path=/] 设置cookie作用的URL路径,默认根目录 [expires=1h] 设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值 [hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5 [no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置 [secure] 设置启用安全的cookie,需要HTTPS支持 [httponly] 允许cookie不通过JS泄漏,没用过