nginx负载均衡优化关键在于匹配业务选策略、健康检查控质量、长连接减开销;轮询适合均质环境,加权轮询适配异构服务器,least_conn用于长连接场景,ip_hash实现会话保持,一致性哈希提升缓存命中率。

Nginx 优化负载均衡效率,关键不在“堆参数”,而在于匹配业务特征选策略、配合健康检查控质量、结合长连接减开销。配置得当,单节点轻松支撑数万并发,响应时间压到毫秒级。
按业务场景选对负载策略
不同请求模式适用不同调度逻辑,硬套默认轮询反而拖慢整体:- 轮询(默认):适合后端服务器性能、延迟完全一致的测试环境或小型集群;生产环境慎用,易造成缓存冷热不均、连接堆积
- 加权轮询(weight):服务器配置差异大时必须启用,比如一台 16C32G、一台 8C16G,可设 weight=2 和 weight=1,让强机多扛流量
- 最少连接(least_conn):WebSocket、gRPC、API网关等长连接场景首选;它实时感知后端活跃连接数,避免某台服务器被“钉死”在千条连接上
- IP哈希(ip_hash):需会话保持(如登录态、购物车)时启用;注意:后端增减节点会导致哈希重分布,用户短暂掉登录,建议搭配 sticky cookie 或 JWT 服务端校验缓解
- 一致性哈希(hash $request_uri consistent):静态资源、CDN回源、缓存穿透防护场景适用;相同 URI 总打同一台,提升后端缓存命中率
配健康检查,不让故障节点拖后腿
Nginx 默认只做被动探测(请求失败才剔除),生产环境务必补上主动健康检查,尤其对状态敏感的服务:-
被动检查:通过
max_fails=3 fail_timeout=30s设置——连续3次超时或5xx即摘流,30秒后自动重试 -
主动检查(需 nginx-plus 或开源版编译 health_check 模块):
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; health_check interval=5s uri=/health timeout=3s fails=2 passes=2; }每5秒发一次 GET /health,2次失败即隔离,2次成功才恢复——比被动方式快数倍发现故障
长连接与 Keep-Alive 协同调优
短连接每请求都握手挥手,CPU和TIME_WAIT暴涨;长连接复用 TCP 是提效核心:-
客户端到 Nginx:开启
keepalive_timeout 75s;,并确保后端服务 keepalive_timeout > 75s(如 Tomcat 的 connectionTimeout 设为 90s) -
Nginx 到后端:
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; keepalive 32; # 每个 worker 进程最多缓存 32 条空闲连接 least_conn; # 配合长连接,避免连接倾斜 } -
代理层设置:
location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; # 清掉 Connection: close,允许复用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
其他关键调优点
- worker 进程数:设为 `worker_processes auto;`,自动匹配 CPU 核心数;再配 `worker_connections 4096;`,单 worker 支持约 4k 并发 - 启用 gzip 压缩:减少传输体积,尤其对 JSON/API 响应,`gzip on; gzip_types application/json text/plain;` - 限制单 IP 请求频次:防爬或误刷,用 `limit_req zone=perip burst=10 nodelay;` 配合 `limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;`不复杂但容易忽略











