Nginx反向代理负载均衡
一、核心流程详解
二、Upstream模块深度配置
1. 多维度负载策略
upstream backend {# 静态权重server 10.0.0.1:80 weight=5; # 动态算法(需Nginx Plus)# least_conn; # 最少连接数# least_time header; # 最低响应时间# 会话保持ip_hash; # 基于客户端IP哈希hash $request_uri consistent; # 一致性哈希# 健康检查配置server 10.0.0.2:80 max_fails=3 fail_timeout=30s;
}
2. 健康检查机制
检查类型 | 实现方式 | 检测粒度 | 适用版本 |
---|---|---|---|
被动检查 | 通过实际请求失败触发 (max_fails) | 请求级 | 开源版 |
主动检查 | 定时发送探测请求到指定端口/路径 | 进程级 | Nginx Plus |
第三方模块 | nginx_upstream_check_module | 自定义 | 开源版 |
主动检查示例 (Nginx Plus):
upstream backend {zone backend_zone 64k;server 10.0.0.3:80;health_check interval=5s fails=3 passes=2 uri=/healthmatch=server_ok;
}match server_ok {status 200;header Content-Type = "text/html";body ~ "Server Ready";
}
三、代理层关键配置精析
1. 超时控制矩阵
location / {# 连接建立超时(TCP握手)proxy_connect_timeout 3s; # 发送请求超时(上传数据)proxy_send_timeout 10s; # 等待响应超时(下载数据)proxy_read_timeout 30s; # 后端不可用时的重试条件proxy_next_upstream error timeout http_502 http_503;proxy_next_upstream_timeout 15s; # 最大重试总时间proxy_next_upstream_tries 3; # 最大重试次数
}
2. 客户端IP透传方案
location / {# 标准IP透传(覆盖多个代理层)proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 高级安全配置proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Port $server_port;
}
$proxy_add_x_forwarded_for
= 原始X-Forwarded-For
+ 当前客户端IP
3. 缓冲区优化策略
proxy_buffering on;
proxy_buffer_size 4k; # 响应头缓冲区
proxy_buffers 8 16k; # 响应内容缓冲区数量*大小
proxy_busy_buffers_size 32k; # 忙碌时缓冲区大小
proxy_temp_file_write_size 64k; # 临时文件写入大小# 内存不足时写入磁盘的阈值
proxy_max_temp_file_size 1024m;
四、性能调优与故障排除
1. 连接复用机制
upstream backend {keepalive 32; # 保持的空闲连接数
}location / {proxy_http_version 1.1; # 必需HTTP/1.1proxy_set_header Connection "";
}
2. 限速与流量控制
# 全局速率限制
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;location /api/ {limit_req zone=api burst=20;proxy_pass http://backend;
}# 后端响应限速
proxy_limit_rate 50k; # 传输速度限制
3. 故障排查工具链
工具 | 使用场景 | 命令示例 |
---|---|---|
Nginx debug日志 | 跟踪请求处理流程 | error_log /tmp/error.log debug; |
ngxtop | 实时监控请求状态 | ngxtop -f /var/log/nginx/access.log |
nginx-slab | 分析共享内存状态 | nginx-slab -s /var/run/nginx.pid |
tcpreplay | 请求重放压测 | tcpreplay -i eth0 test.pcap |
五、高阶场景实践
1. 灰度发布架构
map $cookie_gray $group {"1" new_version;default old_version;
}server {location / {proxy_pass http://$group;}
}upstream old_version { ... }
upstream new_version { ... }
2. 多区域容灾
upstream global_backend {server us-east1.example.com resolve;server eu-central1.example.com resolve;server ap-northeast1.example.com resolve;zone global_backend 64k;
}
3. GRPC 负载均衡
upstream grpc_backend {server 10.0.0.1:50051;server 10.0.0.2:50051;keepalive 100;
}server {listen 50051 http2;location / {grpc_pass grpc://grpc_backend;}
}
六、安全加固指南
-
代理协议保护:
proxy_set_header X-Forwarded-Proto $scheme; if ($http_x_forwarded_proto != 'https') {return 301 https://$host$request_uri; }
-
防IP伪造:
set_real_ip_from 192.168.0.0/16; real_ip_header X-Forwarded-For; real_ip_recursive on;
-
后端防火墙联动:
location / {proxy_pass http://backend;# 拒绝非常用方法limit_except GET POST { deny all; } }
通过以上深度配置,可实现:
- 99.99%后端可用性(智能故障转移)
- 毫秒级故障检测响应(主动健康检查)
- 线性扩展至千级节点(一致性哈希)
- 10倍连接性能提升(HTTP/1.1 keepalive)
- 全链路流量控制(精细化QoS管理)