nginx使用sticky基于cookie的会话保持方式
作者:endzhi
这篇文章主要介绍了nginx使用sticky基于cookie的会话保持方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
nginx使用sticky基于cookie的会话保持
在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字符,默认是routedomain
:哪些域名下可以使用这个cookiepath
:指定路径启用sticky,默认路径/,例如path/test,只有test目录才会使用sticky做负载均衡。expires
:cookie过期时间,默认浏览器关闭就过期,也就是会话方式 用发sticky expires=60s;no_fallback
:如请求包含cookie且相应后端不可用,nginx将返回502(错误网关或代理错误)。secure
:安全启用安全Cookie,仅通过https转移。httponly
:启用cookie不会通过js泄漏。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。