nginx使用sticky基于cookie的会话保持

8 篇文章 0 订阅
3 篇文章 0 订阅

   在nginx做负载均衡下,为了确保一个客户只和一台后端服务器通信达到会话保持作用,如使用nginx自带ip_hash,但有很大的缺陷,基于客户端在集中的一个NAT出口IP,如一个大公司网络下多人来访,结果就会分配请求集中于某一后端的服务器,负载就不均匀了。

   nginx-sticky-module这个第三方模块用于添加一个粘性cookie,该粘性cookie始终转发到同一上游服务器。使用cookie跟踪上游服务器使每个浏览器都是唯一的,当处理多个后端服务器时,一个客户端(浏览器)总是由同一台后端服务器提供服务(例如用于会话持久性)有时很有用。当然浏览器不支持Cookie时,粘性模块也无法应用。

安装部署

在现有的nginx加装,从源代码重新编译Nginx来获得该模块

wget  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
tar -zxvf   master.tar.gz
mv  nginx-goodies-nginx-sticky-module-ng-08a395c66e42   nginx-sticky

先检测nginx已安装的模块

/usr/local/nginx/sbin/nginx  -V

再次进入nginx的安装包位置

cd nginx-1.17.3

按以上结果,加装nginx-sticky进去

./configure --prefix=/usr/local/nginx --add-module=/root/nginx-sticky/  --with-http_stub_status_module --with-http_ssl_module --with-pcre

make  (不要make install  这就覆盖了)

备份先

 cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old

 cp ./objs/nginx   /usr/local/nginx/sbin/nginx

安装完毕,检测已安装模块

/usr/local/nginx/sbin/nginx  -V

配置nginx sticky

nginx 的upstream使用sticky,如下

upstream backend {
     sticky;
     server 192.168.100.209:80;
     server 192.168.100.225:80;
}

即可开启了sticky功能使用,已经满足一般业务需求,也可以与nginx_http_upstream_check_module一起使用,在这就不详细说明了。

 

如需其他用法,参考。sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly];

 

name: 可以为任何的string字符,默认是route

domain:哪些域名下可以使用这个cookie

path:指定路径启用sticky,默认路径/,例如path/test,只有test目录才会使用sticky做负载均衡。

expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式 用发sticky expires=60s;

no_fallback:如请求包含cookie且相应后端不可用,nginx将返回502(错误网关或代理错误)。

secure:安全启用安全Cookie,仅通过https转移。

httponly:启用cookie不会通过js泄漏。

 

 

参考文献

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx的反向代理配置中,可以通过配置相应的代理模块来实现会话保持。具体而言,Nginx提供了以下几种实现会话保持的方式: 1. 使用`ip_hash`负载均衡算法:可以通过在`upstream`块中设置`ip_hash`指令来实现会话保持。这样相同IP的请求将被转发到同一台后端服务器上,从而保持会话。 ```nginx upstream backend_servers { ip_hash; server backend1.example.com; server backend2.example.com; } ``` 2. 使用`sticky`模块:`sticky`模块是一个第三方模块,可以通过在`upstream`块中设置`sticky`指令来实现会话保持。它使用一些算法(如cookie、URL参数等)来标记和识别会话,将同一会话的请求转发到同一台后端服务器上。 ```nginx http { upstream backend_servers { sticky cookie srv_id expires=1h domain=.example.com path=/; server backend1.example.com; server backend2.example.com; } } ``` 3. 使用`ngx_http_upstream_session_sticky`模块:这是另一个第三方模块,可以通过在`upstream`块中设置相应的指令来实现会话保持。它使用一些算法(如cookie、URL参数等)来标记和识别会话,并将同一会话的请求转发到同一台后端服务器上。 需要注意的是,使用这些方法实现会话保持时,需要确保后端服务器之间能够共享会话信息,例如使用共享存储(如Redis)或使用会话复制机制等。 选择适合你场景的方法,并根据具体需求进行配置即可实现Nginx会话保持功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值