# ============================================================ # Nginx 负载均衡 - IP 哈希配置示例 # ============================================================ # # 功能说明: # - 同一客户端 IP 始终路由到同一服务器 # - 实现会话保持(Session Persistence) # - 适用于无状态服务器但有会话需求的场景 # # Lolly 对应配置: # server: # proxy: # - path: "/api" # targets: # - url: "http://backend1:8080" # - url: "http://backend2:8080" # - url: "http://backend3:8080" # load_balance: "ip_hash" # ============================================================ upstream backend { # IP 哈希算法 # Lolly 对应: load_balance: "ip_hash" ip_hash; server backend1:8080; server backend2:8080; server backend3:8080; # 注意: backup 参数在 ip_hash 模式下不生效 } server { listen 80; server_name iphash.example.com; location /api { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # IP 哈希算法说明: # # 1. 工作原理: # hash_key = hash(client_ip) % server_count # - 使用客户端 IPv4 地址的前三段进行哈希 # - IPv6 使用整个地址 # - 保证同一 IP 总是路由到同一服务器 # # 2. 适用场景: # - 传统 Session 存储(本地内存 Session) # - 无外部 Session 存储(Redis/Memcached) # - 本地缓存依赖(文件缓存) # # 3. 限制: # - 服务器增减时哈希重新计算,可能影响所有用户 # - 不适合动态伸缩场景 # - 权重参数不生效 # - backup 不生效 # # 4. 替代方案: # - 使用一致哈希(consistent_hash) # - 使用外部 Session 存储(Redis) # - 使用 sticky cookie 模块 # # 5. 注意事项: # - 在负载均衡器后需要获取真实 IP # - 配合 X-Forwarded-For 头部使用 # - 大量相同 IP(代理用户)可能导致不平衡