sticky是基于cookie的一种负载均衡解决方案,通过分发和识别cookie,使来自同一个客户端的请求落在同一台服务器上.

sticky模块与Ip_hash都是与负载均衡算法相关,但又有差别,差别是:

  • ip hash,根据客户端的IP,将请求分配到不同的服务器上
  • sticky,根据服务器给客户端的cookie,客户端再次请求时会带上此cookie,nginx会把有此cookie的请求转发到颁发cookie的服务器上

官网:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/

安装模块

wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz #下载解压

重新编译nginx

运行nginx -V,查看先前编译的模块和参数,尽量不影响现有服务

./configure ..........

make /usr/sbin/nginx /usr/sbin/nginx.old
cp -rf objs/nginx /usr/sbin/nginx
cp -a /etc/nginx/conf.d/ /tmp/nginx.conf/
nginx -V
nginx-t

验证模块、参数无错后执行make install

sticky语法

指令描述
name设置记录cookie的名称(可自定义),默认为route
domain设置cookie要使用的域名
path设置cookie作用的URL路径,默认根目录
expires设置cookie的生存期
hash值为 index、md5、sha1,对应明文、md5、和sha1,默认md5,测试sha1后端服务器会变
no_fallback当sticky的后端机器挂了以后,nginx返回502,而不转发到其他服务器,不建议设置
secure设置启用安全的cookie,需要HTTPS支持
httponly允许cookie不通过JS泄漏

配置文件示例

upstream backend {
sticky;
server 192.168.1.100 weight=3 max_fails=3 fail_timeout=10s;
server 192.168.31.244:8080 down;  #标注此服务器不参加负载
}