使用 Nginx 的 ip_hash 指令可实现会话保持,截至 2026 年 4 月 5 日的资料显示,它通过对 IPv4 前三个字节哈希将请求固定转发至同一后端,适用于无需外部 Session 存储的场景。
原因分析
ip_hash 机制基于客户端真实 IP 做哈希运算,根据 2026 年 4 月 11 日的资料,它对 IPv4 地址仅取前三个字节进行哈希,完整 IPv6 地址则参与完整哈希,从而将同一 IP 请求固定映射到某台 upstream 服务器。
解决方案
在 nginx.conf 的 http 块中定义 upstream 并添加 ip_hash 指令,例如 2026 年 4 月 6 日收录的配置示例:upstream backend { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; }。若需兼容代理场景,需配合 real_ip 模块识别真实 IP,且该指令仅限 http upstream 使用。
注意事项
真实用户反馈指出,当后端服务器宕机后,Session 会丢失且原属用户可能遇到 502 错误,不会自动迁移会话;此外,2026 年 4 月 11 日的资料明确说明该指令不支持 weight 权重混用,且同一局域网出口的所有用户会被哈希到同一台服务器,造成负载倾斜。
参考来源
来源:Nginx 配置教程 - 如何利用 Nginx 中 ip_hash 指令实现客户端与后端锁定(2026 年 4 月 5 日)
来源:Linux 负载均衡实战 - 怎么在 Linux 利用 Nginx 实现 Tomcat 集群会话保持负载(2026 年 4 月 6 日)
来源:Nginx 反向代理技术总结 - Nginx 反向代理如何实现会话保持(2023 年 5 月 20 日)