企业级Nginx负载均衡需显式配置upstream块,结合least_conn、ip_hash等策略,启用主动/被动健康检查,精细化proxy_pass改写、超时调优及可观测性加固。

精准控制 upstream 负载均衡策略
企业级反向代理不能只靠默认轮询。建议显式定义 upstream 块,结合健康检查与多种调度算法:
- 用 least_conn 分配给当前连接数最少的后端,适合长连接场景(如 WebSocket 或 gRPC)
- 用 ip_hash 保证同一客户端 IP 始终落在同一台后端,适用于有服务端会话状态的旧系统
- 启用主动健康检查:Nginx Plus 支持
health_check指令;开源版可配合nginx_upstream_check_module编译模块,或用被动检查(max_fails=3 fail_timeout=30s) - 为关键服务设置 backup 和 down 标记,便于灰度切换或故障隔离
精细化 proxy_pass 请求改写与头信息管理
真实业务中,后端服务往往不感知前端 Nginx 的路径结构或 TLS 终止。需主动重写请求上下文:
- 用 proxy_redirect 修正后端返回的
Location、Refresh等跳转头,例如:proxy_redirect https://api.example.com/ /api/; - 用 proxy_set_header 补全可信链路信息:
proxy_set_header X-Real-IP $remote_addr;、X-Forwarded-For(注意追加而非覆盖)、X-Forwarded-Proto $scheme; - 若后端依赖 Host 头,用
proxy_set_header Host $host;或更安全的proxy_set_header Host $http_host;(保留端口) - 敏感头如
Authorization默认被丢弃,需显式透传:proxy_pass_request_headers on;并确保未被underscores_in_headers on;影响(避免下划线字段被忽略)
超时、缓冲与连接复用调优
默认超时值(60s)在微服务或高延迟链路下极易引发级联超时。应按业务 SLA 分层配置:
- proxy_connect_timeout:建议设为 3–5s(建连阶段,含 DNS 解析),太短易误判,太长拖慢失败反馈
-
proxy_send_timeout 和 proxy_read_timeout:区分“发请求”和“收响应”。对同步 API 可设 15–30s;对流式接口(如 SSE)需延长至数分钟,并搭配
proxy_buffering off; - 启用连接池复用:
proxy_http_version 1.1;+proxy_set_header Connection '';,避免频繁建连开销 - 合理控制缓冲区:
proxy_buffering on;提升吞吐,但大响应体建议关掉并配proxy_buffer_size和proxy_buffers防 OOM
可观测性与安全加固要点
生产环境必须让流量“看得清、控得住、留得下”:
- 记录关键变量到 access_log:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$upstream_addr" "$upstream_response_time" $request_time'; - 限制请求频率与资源消耗:
limit_req zone=api burst=20 nodelay;,配合limit_conn防连接耗尽 - 禁用危险方法:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$) { return 405; } - 隐藏 Nginx 版本:
server_tokens off;;对静态资源启用expires;敏感路径(如 /admin)做 IP 白名单或 basic auth


















