千家信息网

Nginx基于nginx-sticky-module模块如何进行会话保持

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要讲解了"Nginx基于nginx-sticky-module模块如何进行会话保持",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Nginx基
千家信息网最后更新 2025年02月06日Nginx基于nginx-sticky-module模块如何进行会话保持

这篇文章主要讲解了"Nginx基于nginx-sticky-module模块如何进行会话保持",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Nginx基于nginx-sticky-module模块如何进行会话保持"吧!

sticky介绍

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

  1. ip hash,根据客户端的IP,将请求分配到不同的服务器上

  2. sticky,根据服务器给客户端的cookie,客户端再次请求时会带上此cookie,nginx会把有此cookie的请求转发到颁发cookie的服务器上

sticky原理

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

  1. 客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。

  2. 后端服务器处理完请求,将响应数据返回给nginx。

  3. 此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。

  4. 客户端接收请求,并保存带route的cookie。

  5. 当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

sticky官网

官方地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src 下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz

注意点

  1. 同一客户端,如果启动时同时发起多个请求,有可能落在不同的后端服务器上。

  2. 由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。

  3. 客户端可能不带cookie,Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。

  4. cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值

  5. 客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。

  6. Nginx sticky模块不能与ip_hash同时使用

Nginx安装Sticky模块

如果你还没有部署Nginx,那么就在部署Nginx的时候进行 --add-module 添加上此模块就行了,我这里是Nginx已经安装过了,需要再把此模块加载进NGINX

1.下载sticky

wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gztar xf master.tar.gz#把此模块放进nginx/module目录下,名称太长,重命名一下mkdir /usr/local/nginx/modulemv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 /usr/local/nginx/module/nginx-sticky-module

2.重新编译NGINX 下载一个NGINX后重新解压,然后看之前NGINX编译了那些模块,这里都给加上,在最后加上 --add-module载入sticky模块

tar xf nginx-1.16.1.tar.gzcd nginx-1.16.1./configure --prefix=/usr/local/nginx \--sbin-path=/usr/local/nginx/sbin/nginx \--conf-path=/usr/local/nginx/conf/nginx.conf \--pid-path=/usr/local/nginx/run/nginx.pid \--error-log-path=/usr/local/nginx/logs/error.log \--http-log-path=/usr/local/nginx/logs/access.log \--with-pcre \--user=nginx \--group=nginx \--with-stream \--with-threads \--with-file-aio \--with-http_v2_module \--with-http_ssl_module \--with-http_realip_module \--with-http_gzip_static_module \--with-http_stub_status_module \--add-module=/usr/local/nginx/module/nginx-sticky-module            #在此载入sticky模块#./configure完后进行编译,然后更换 nginx 程序make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.oldcp -rf objs/nginx /usr/local/nginx/sbin/#最后再 make upgrade 进行更新检测[root@nginx_proxy02 nginx-1.16.1]# make upgrade/usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successfulkill -USR2 `cat /usr/local/nginx/run/nginx.pid`sleep 1test -f /usr/local/nginx/run/nginx.pid.oldbinkill -QUIT `cat /usr/local/nginx/run/nginx.pid.oldbin`

以上就完成了Nginx载入第三方模块,使用 nginx -V 来查看是否载入成功

3.修改NGINX配置文件 修改NGINX配置文件来启用sticky

upstream backend {        sticky name=ngx_cookie expires=6h;        server 192.168.31.240:8080 weight=3 max_fails=3 fail_timeout=10s;        server 192.168.31.241:8080 weight=3 max_fails=3 fail_timeout=10s;        server 192.168.31.242:8080 weight=6 max_fails=3 fail_timeout=10s;        server 192.168.31.243:8080;        server 192.168.31.244:8080 down;}
mkdir /usr/local/nginx/ngx_cookie

4.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泄漏

**5.重启NGINX **

/usr/local/nginx/sbin/nginx -s reload

测试访问NGINX

第一次访问的时候是没有Cookie的,访问完成后NGINX才会把Cookie包含在返回的数据中,在下次请求数据的时候就会出现Cookie。 所以刷新一下后才能看到Cookie。

感谢各位的阅读,以上就是"Nginx基于nginx-sticky-module模块如何进行会话保持"的内容了,经过本文的学习后,相信大家对Nginx基于nginx-sticky-module模块如何进行会话保持这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

模块 客户 服务器 服务 客户端 名称 均衡 数据 时候 端的 学习 编译 不同 内容 同时 地址 差别 文件 明文 测试 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海软件开发 开发 网络安全水准 必火网络安全就业率 计算机软件开发建设项目 构筑网络安全的钢铁防线 智能互联网络技术的了解 斗鱼青少年网络安全 360网络安全教授房教授 开封市政府网络安全 广州正规软件开发哪家实惠 信息网络安全的核心是 scum服务器自动重启设置 广州电脑软件开发哪家可靠 db2 数据库字符集查看 献祭之油六零数据库 人脸识别技术带来的网络安全问题 手机网络安全模式 小翼管家服务器连接失败稍后再试 虚拟机服务器安装虚拟机的步骤 互联网大数据科技风 网络安全日教育方案 企业网络安全系统建设方案 浙江省网络安全人才报告 软件开发源代码 版权 弹弹奇兵华为怎么找之前的服务器 池州机械专业软件开发平台 数据库有那几个 网络安全常识题大全一年级 建立好的前端如何添加数据库 小翼管家服务器连接失败稍后再试
0