一、核心流程详解
二、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=/health
match=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.1
proxy_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管理)