应放弃ip_hash,改用cookie路由:后端登录时下发route cookie,nginx配置hash $cookie_route consistent;长期应采用jwt+redis无状态会话,负载均衡用least_conn。

移动网络下 IP 频繁切换(如 4G/5G 与 Wi-Fi 切换、基站重选、CGNAT 轮转)会让 ip_hash 失效——它不是配置错了,而是设计上就不适配这类场景。IP 一变,哈希结果就跳,会话立刻丢失。真正可行的策略,是绕开 IP 这个不稳定因子,改用业务层可控标识。
放弃 ip_hash,改用 Cookie 路由
这是最直接、落地成本最低的方案。后端登录成功时下发一个带路由信息的 Cookie(如 ROUTE=server-2),Nginx 依据该值做一致性哈希:
- upstream 配置中去掉
ip_hash,改用:hash $cookie_ROUTE consistent; - 确保后端响应头包含:
Set-Cookie: ROUTE=server-2; Path=/; HttpOnly; Secure - 前端请求需携带 Cookie(如 fetch 加
credentials: 'include') - 增减后端节点时,
consistent参数能大幅减少路由漂移
若必须保留 ip_hash,仅限极少数可控环境
比如企业定制 App + 固定 APN + 内网部署,可做有限增强:
- 启用
real_ip_module,明确可信代理段:set_real_ip_from 192.168.0.0/16;set_real_ip_from 10.0.0.0/8;real_ip_header X-Forwarded-For; - 在 proxy_pass 前透传真实 IP:
proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - 后端同步 Session 到 Redis,Nginx 跳转后尝试按 Cookie 中的
JSESSIONID恢复状态
长期方向:彻底解耦会话与节点绑定
不再依赖任何粘滞策略,让负载均衡回归简单高效:
- 登录态交由 JWT 全局校验,无状态、可扩展
- Session 统一存 Redis 或 JetCache,所有后端共享
- 前端持久化 Token,后端只校验签名,不维护本地状态
- 负载均衡可直接用
least_conn或加权轮询,容错性和伸缩性都更好
不复杂但容易忽略。











