Nginx反向代理负载均衡

发布于:2025-08-01 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、核心流程详解

客户端 Nginx 后端服务器1 请求 (Client IP: 1.2.3.4) 新建代理请求 (Nginx IP: 192.168.0.1) 响应数据 返回数据 客户端 Nginx 后端服务器1

二、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;
    }
}

六、安全加固指南

  1. 代理协议保护

    proxy_set_header X-Forwarded-Proto $scheme;
    if ($http_x_forwarded_proto != 'https') {
        return 301 https://$host$request_uri;
    }
    
  2. 防IP伪造

    set_real_ip_from 192.168.0.0/16;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    
  3. 后端防火墙联动

    location / {
        proxy_pass http://backend;
        # 拒绝非常用方法
        limit_except GET POST { deny all; } 
    }
    

通过以上深度配置,可实现:

  • 99.99%后端可用性(智能故障转移)
  • 毫秒级故障检测响应(主动健康检查)
  • 线性扩展至千级节点(一致性哈希)
  • 10倍连接性能提升(HTTP/1.1 keepalive)
  • 全链路流量控制(精细化QoS管理)

网站公告

今日签到

点亮在社区的每一天
去签到