0x06 - Nginx 负载均衡会话保持
Nginx 负载均衡会话保持
背景
负载均衡时,如果APP需要保持特定状态的时候,就要保证同一用户的 session 会被分配到同一台服务器上。
实现方案
- 使用cookie
将用户的 session 存入 cookie 里,当用户分配到不同的服务器时,先判断服务器是否存在该用户的 session,如果没有就先把 cookie 里面的 sessoin 存入该服务器,实现 session 会话保持。缺点是存入 cookie 有安全隐患。 - 使用缓存
利用 memcache ,Redis 等缓存分布式的特点,可以将所有服务器产生的 session 存入同一台服务器的缓存中,实现 session 共享。这样安全性比较高,而且从内存中读取 session 比从文件中读取速度快。 - 使用 ip_hash
如果是 nginx 服务器的负载均衡,可以在 upstream 里设置 ip_hash,每个请求按访问 ip 的 hash 结果分配,映射到固定某一台的服务器。缺点是可能导致负载不均衡。
upstream https_proxy { server 172.26.114.89:8443; server 172.26.114.93:8443; ip_hash; }
注:ip_hash 不能和 weight 在一起使用。
注:使用案例,使用 Spring 框架,Redis 共享 Session,在页面出错的时候会频繁切换节点,有时候会导致两个节点执行相同的相应,这时就需要启动 ip_hash 来固定访问者。
本文来自博客园,作者:duchaoqun,转载请注明原文链接:https://www.cnblogs.com/duchaoqun/p/11947141.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?