轮询(默认):均分请求到各后端。
加权轮询:server backend1 weight=3;
server backend1 weight=3;
IP哈希:ip_hash; 同一客户端固定到同一后端。
ip_hash;
最少连接:least_conn;
least_conn;
Nginx通过客户端的IP地址计算哈希值(hash),将同一IP的请求固定分配到同一台后端服务器。(例如:客户端A的IP哈希后固定分配到服务器1,客户端B分配到服务器2)
会话保持(Session Persistence):确保同一用户的多次请求由同一台后端服务器处理,避免因多台服务器间会话不同步导致的问题(如登录状态丢失、购物车数据不一致)。
一致性:适用于依赖本地缓存或需要保持上下文的应用场景(如WebSocket长连接)。
upstream backend { ip_hash; # 启用IP哈希策略 server backend1.example.com; server backend2.example.com; }
✅ 优点:简单实现会话一致性,无需额外配置会话共享(如Redis)。
❌ 缺点:
如果后端服务器宕机,哈希映射可能失效(需配合健康检查)。
如果客户端IP分布不均(如大量请求来自同一IP),可能导致负载不均衡。
Nginx将新请求分配给当前活跃连接数最少的后端服务器。(例如:服务器1有10个连接,服务器2有5个连接,新请求会优先发给服务器2)
动态负载均衡:根据后端服务器的实时负载分配请求,避免某些服务器过载。
公平性:适合处理时间差异较大的请求(如部分请求耗时较长,部分较短)。
upstream backend { least_conn; # 启用最少连接策略 server backend1.example.com; server backend2.example.com; }
✅ 优点:动态适应服务器负载,资源利用率更高。
需要Nginx实时跟踪各服务器的连接数,增加少量计算开销。
不适用于需要会话保持的场景(需额外配合会话共享机制)。
选择IP哈希:
当应用依赖本地会话(如未使用分布式Session存储)。
需要长连接保持(如WebSocket)。
选择最少连接:
后端服务器性能差异较大或请求处理时间不稳定。
高并发场景下追求更均衡的负载分配。