【项目实战】NGINX 实现会话保持

在 NGINX 中实现会话保持(Session Persistence),可以通过多种方法完成。先说总结吧。

IP Hash:适合简单场景,但对网络变化敏感。
Cookie:最常用、灵活,适合大部分会话保持需求。
URL 参数:适合特定业务场景,例如 URL 中带有用户标识符。
第三方模块:适用于需要更多控制或特殊功能的场景。

使用 IP 哈希(IP Hash)

IP 哈希是一种简单的负载均衡策略,它基于客户端的 IP 地址将请求分配到同一个后端服务器。该方法适合基本的会话保持场景。

配置示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

upstream backend {

    ip_hash;  # 使用 IP 哈希来实现会话保持

    server backend1.example.com;

    server backend2.example.com;

}

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://backend;

    }

}

这种方式比较简单,但如果客户端的 IP 发生变化,会话保持就会失效(例如,移动客户端切换网络)。

基于 Cookie 的会话保持

NGINX 可以通过设置一个特定的 Cookie 来实现会话保持,客户端的请求将基于 Cookie 被路由到同一台后端服务器。

配置示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

upstream backend {

    server backend1.example.com;

    server backend2.example.com;

    sticky cookie srv_id expires=1h;  # 基于 Cookie 实现会话保持

}

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://backend;

    }

}

在这个示例中,`sticky cookie srv_id expires=1h;` 会为客户端设置一个名为 `srv_id` 的 Cookie,并且该 Cookie 的有效期为 1 小时。当客户端发起请求时,它会带上这个 Cookie,NGINX 将根据 Cookie 将请求路由到正确的服务器。

基于 URL 参数的会话保持

如果应用程序能够在 URL 中传递某种标识符,NGINX 也可以基于 URL 参数实现会话保持。配置示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

upstream backend {

    server backend1.example.com;

    server backend2.example.com;

    sticky route $arg_session_id;  # 基于 URL 参数实现会话保持

}

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://backend;

    }

}

在这个示例中,NGINX 使用 `$arg_session_id` 来决定请求应该路由到哪一台后端服务器。需要确保应用程序在 URL 中正确地传递 `session_id` 参数。

基于 Session Sticky 模块

如果需要更加灵活的会话保持配置,你可以使用第三方的 `nginx-sticky-module` 模块(需要手动编译 NGINX 支持此模块)。

配置示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

upstream backend {

    sticky;  # 使用 sticky 模块

    server backend1.example.com;

    server backend2.example.com;

}

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://backend;

    }

}

这需要额外安装模块,可以提供更丰富的会话保持功能,如基于 Cookie 或其他自定义规则。

具体实现

基于 `nginx-sticky-module` 模块实现会话保持需要先编译并安装该模块,然后配置 NGINX 使用它。以下是详细的实现步骤,包括模块的安装和配置过程。

 1. 安装 NGINX Sticky 模块

Step 1: 下载并编译 NGINX 源码和 Sticky 模块

要安装 `nginx-sticky-module`,需要重新编译 NGINX 并加入该模块。以下是基于 Linux 的示例:

- 首先,安装必要的依赖:

1

2

sudo apt-get update

sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

- 下载 NGINX 源码(可根据需要下载你所用的版本):

1

2

3

4

cd /usr/local/src

wget http://nginx.org/download/nginx-1.24.0.tar.gz   版本号可以根据需要调整

tar -zxvf nginx-1.24.0.tar.gz

cd nginx-1.24.0

- 下载 `nginx-sticky-module` 模块:

1

git clone https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git

Step 2: 编译并安装 NGINX

在编译 NGINX 时,指定模块路径,将 `sticky-module` 添加到 NGINX 中:

- 检查当前 NGINX 的编译参数(如果 NGINX 已经安装):

1

nginx -V

- 进入 NGINX 源码目录,编译并安装 NGINX:

1

2

3

./configure --with-http_ssl_module --add-module=/usr/local/src/nginx-sticky-module-ng   根据路径调整

make

sudo make install

- 验证 NGINX 是否正确编译和安装:

1

/usr/local/nginx/sbin/nginx -v

 2. 配置 NGINX 使用 Sticky 模块

`nginx-sticky-module` 安装好后,你就可以使用它来实现会话保持。

 配置示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

upstream backend {

    sticky;

    server backend1.example.com;

    server backend2.example.com;

    server backend3.example.com;

}

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://backend;

    }

}

- `sticky`:此指令开启会话保持,模块会自动为每个客户端生成一个基于 Cookie 的哈希值,并将请求路由到同一台服务器。

该配置基于 `nginx-sticky-module`,它会为客户端设置一个名为 `route` 的 Cookie,后续请求将通过该 Cookie 进行会话保持。

 3. Sticky 指令的更多配置选项

`nginx-sticky-module` 支持多种配置参数,可以根据需求进行调整。常用选项如下:

- `sticky name=cookiename expires=1h domain=.example.com path=/`:
  - `name`: 指定 Cookie 名字,默认为 `route`。
  - `expires`: Cookie 的过期时间,例如 `1h` 表示 1 小时。
  - `domain`: 指定 Cookie 作用的域名。
  - `path`: 指定 Cookie 的路径。 配置示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

upstream backend {

    sticky name=sessionid expires=2h domain=.example.com path=/;

    server backend1.example.com;

    server backend2.example.com;

    server backend3.example.com;

}

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://backend;

    }

}

此配置将创建一个名为 `sessionid` 的 Cookie,Cookie 的有效期为 2 小时,且适用于 `.example.com` 域名下的所有路径。

 4. 验证 Sticky 会话保持

- 启动 NGINX 服务:

1

sudo /usr/local/nginx/sbin/nginx

- 测试配置是否生效:可以通过浏览器或 curl 工具测试,观察是否客户端的后续请求会被路由到同一台服务器。

1

curl -I http://example.com

5. 常见问题排查

- 模块安装失败:确保 NGINX 是通过源码编译的,并且在编译时指定了 `--add-module` 参数。如果 NGINX 是通过包管理器安装的,可能需要先卸载再重新编译。
- NGINX 无法启动:确保所有 NGINX 配置文件语法正确,可以使用以下命令检查配置:

1

sudo /usr/local/nginx/sbin/nginx -t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495010.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA HTTP压缩数据

/*** 压缩数据包** param code* param data* param resp* throws IOException*/protected void writeZipResult(int code, Object data, HttpServletResponse resp) throws IOException {resp.setHeader("Content-Encoding", "gzip");// write到客户端resp…

京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分: 1. 平台产品能力介绍 2. 业务赋能案例分享 3. 平台建设挑战与展望 作者:梁臣 京东 数据产品架构师 01平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用…

springBoot Maven 剔除无用的jar引用

目录 Used undeclared dependencies found Unused declared dependencies found 当项目经过一段时间的开发和维护后,经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关,这些依赖之间的关系错综复杂。这种情况在项目维护过程中是…

Apache RocketMQ 5.1.3安装部署文档

官方文档不好使,可以说是一坨… 关键词:Apache RocketMQ 5.0 JDK 17 废话少说,开整。 1.版本 官网地址,版本如下。 https://rocketmq.apache.org/download2.配置文件 2.1namesrv端口 在ROCKETMQ_HOME/conf下 新增namesrv.pro…

uniapp Native.js原生arr插件服务发送广播到uniapp页面中

前言 最近搞了个设备,需求是读取m1卡,厂家给了个安卓原生demo,接入arr插件如下,接入后发现还是少了一部分代码,设备服务调起后触发刷卡无法发送到uniapp里。 中间是一些踩坑记录,最后面是解决办法&#xf…

实践KDTS-WEB从mysql迁移到kingbasev9

数据库国产化替代数据迁移是一个复杂且关键的过程。这涉及到将原有数据库中的数据准确、完整地迁移到新的国产数据库中,同时确保数据的完整性和一致性。人大金仓提供了强大的数据库迁移工具(KDTS)对同构、异构数据库数据迁移; 数…

nmap扫描优化

扫描优化用来提高扫描效率。当描一个大范围网络中的主机时,如果使用通用的方法可能需要很长的时间,此时可以使用一些特定选项进行扫描优化,以提高扫描效率。Nmap提供了几种优化方式,如分组扫描、设置发包方式和超时时间等。 分组…

mysql 查询优化之字段建立全文索引

最近在接手一些老项目时发现表设计存在问题导致查询较慢 例如一张旧表的设计: 模糊匹配某个关键字时,需要十几秒左右,而且表的数据量不多 都知道mysql8.0版本InnoDB引擎都支持全文索引了,因此可以在content建立全文索引,但全文索引对中文支持并不完善…

Selenium 和 Playwright两大框架的不同之处

自动化测试工具百花齐放,其中 Selenium 和 Playwright 是两大热门框架,谁才是你的最佳选择?面对企业项目的真实需求,它们的差异究竟在哪儿? Selenium 和 Playwright 是两种流行的自动化测试工具,它们都被用…

智能化军事【五】精确制导武器智能化实现

文章目录 前言精确制导武器智能化实现基于深度学习实现的智能化功能基于强化学习实现的智能化功能强化学习深度强化学习 网络模型轻量化网络剪枝(通道剪枝)技术层剪枝权值量化技术低秩近似技术知识蒸馏技术强化学习联合训练 解决有效训练样本不足或获取困…

Windows内核开发环境配置

SDK 软件开发工具包 r3用到的win32api 就是SDK WDK 驱动内核 r0用到的包 Previous WDK versions and other downloads - Windows drivers | Microsoft Learn sdk版本必须和wdk版本一致 驱动环境部署 #include <ntifs.h>NTSTATUS DriverUnload(PDRIVER_OBJECT pDriver) …

图像处理-Ch6-彩色图像处理

Ch6 彩色图像处理 无广告更易阅读&#xff0c;个人博客点此进入<– 文章目录 Ch6 彩色图像处理彩色基础彩色模型(Color models)RGB(red, green, blue)CMY & CMYK(cyan, magenta, yellow/and black)HSI(hue, saturation, intensity)HSV(hue, saturation, value) 颜色空…

window安装TradingView

目录 下载安装包 修改文件后缀&#xff0c;解压 将K线换成国内涨红跌绿样式 下载安装包 https://www.tradingview.com/desktop/ 下载完成后是.msix格式文件 &#xff08;我在win10和win11的系统中尝试运行msix都没有成功&#xff0c;所以放弃直接双击运行msix&#xff…

畅捷通T+13管理员密码任意重置漏洞

复现版本 畅捷通13 漏洞复现 POST /tplus/ajaxpro/RecoverPassword,App_Web_recoverpassword.aspx.cdcab7d2.ashx?methodSetNewPwd HTTP/1.1 Host: 192.168.1.8:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0 Accept…

搭建Elastic search群集

一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件&#xff1a; /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…

三.统一异常Exception拦截处理

文章目录 前言一、先定义一个业务异常类二、定义全局异常处理器二、测试小插曲抛出异常&#xff1a;抛出自定义异常&#xff1a; 总结 前言 上一章对统一返回值进行封装&#xff0c;但是都是基于正常情况下的返回&#xff0c;系统难免会出现异常的情况&#xff0c;我们不可能在…

Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总

问题1&#xff1a;打包的过程中不断提示 &#xff1a;codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决&#xff1a;打开钥匙串&#xff0c;点击证书---显示简介---信任----改为始终信任 &#xff08;记住 &#xff1a;不能只修改钥匙的显示简介的…

汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片

概述: 杰发科技自成立以来,一直专注于汽车电子芯片及相关系统的研发与设计。 产品布局: 合作伙伴: 杰发科技不断提升产品设计能力和产品工艺,确保产品达 到更高的质量标准。目前杰发科技已通过ISO9001质 量管理体系与CMMIL3认证。 杰发科技长期合作的供应商(芯片代工厂、…

Linux系统安装部署xtrabackup

简介 xtrabackup一款强大的在线热备份工具备份过程中不锁库表&#xff0c;适合生产环境由专业组织Percona提供&#xff08;改进MySQL分支&#xff09; 下载xtrabackup xtrabackup官网地址&#xff1a;https://www.percona.com/ 进去官网后&#xff0c;下滑到底部导航栏&…

有没有检测吸烟的软件 ai视频检测分析厂区抽烟报警#Python

在现代厂区管理中&#xff0c;安全与规范是重中之重&#xff0c;而吸烟行为的管控则是其中关键一环。传统的禁烟管理方式往往依赖人工巡逻&#xff0c;效率低且存在监管死角&#xff0c;难以满足当下复杂多变的厂区环境需求。此时&#xff0c;AI视频检测技术应运而生&#xff0…