nginx负载均衡之基于客户端cookie的会话保持
通过ip_hash做会话保持有一定的缺陷,这个是通过客户端ip来实现。同一个网络下众多客户端访问服务器会被扔到同一台机器,再或者是CDN也 会导致负载不均衡。所以要实现通过客户端cookie实现,包括F5、深信服设备其中的会话保持也是通过插入cookie值来实现会话保持。下次客户端访 问服务器,带上本地cookie,nginx中的sticky模块分析并扔到对应服务器中。
0 工作原理
软件版本:
nginx-1.6.0
nginx-sticky-module-1.1
1 下载 Session Sticky
2 安装模块
[root@localhost nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.35 --with-zlib=/usr/local/zlib-1.2.8 --with-http_ssl_module --with-openssl=/usr/local/openssl-1.0.1c --add-module=/usr/local/src/nginx-sticky-module-1.1 [root@localhost nginx-1.6.0]# make [root@localhost nginx-1.6.0]# make install
make时报错:
objs/addon/nginx-sticky-module-1.1/ngx_http_sticky_misc.o] 错误 1
参考解决方法:
方法一:
nginx-1.5.x以上版本和nginx-sticky-module-1.1编译会有点问题,应该是nginx新版本没有相应的nginx- sticky-module,解决办法是把nginx-sticky-module-1.1/ngx_http_sticky_misc.c的281行修 改为:
digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in), digest->data, len, 1);
方法二:
降低nginx版本为nginx-1.2.3编译通过。
sticky模块参数只用于upstream段中,并且不能和ip_hash同时存在。
支持的参数:
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以为任何的string字符,默认是route
domain:哪些域名下可以使用这个cookie
path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡
expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用。
配置参考(反向代理部分略过):
upstream apache {
sticky name=srv_id expires=1h domain=.test.com path=/;
server 192.168.5.4 max_fails=3 fail_timeout=20s;
server 192.168.5.5 max_fails=3 fail_timeout=20s;
}
3 激活模块
在 upstream块中添加 sticky; 即可激活Session Sticky模块。
upstream { sticky; server 127.0.0.1:9000; server 127.0.0.1:9001; server 127.0.0.1:9002; }
4 参考资料
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)