以下是为高性能Nginx反向代理与负载均衡的配置指南,采用最佳实践优化:

核心配置 (nginx.conf)

user nginx;
worker_processes auto;  # 自动匹配CPU核心数
worker_rlimit_nofile 65535;  # 提升文件描述符限制

events {
    worker_connections 4096;  # 单worker最大连接数
    use epoll;  # Linux高性能事件模型
    multi_accept on;  # 同时接受新连接
}

http {
    # 基础优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30s;
    keepalive_requests 1000;
    types_hash_max_size 2048;

    # 负载均衡配置
    upstream backend_cluster {
        least_conn;  # 最少连接数策略
        server 10.0.1.101:8080 weight=3 max_fails=3 fail_timeout=15s;
        server 10.0.1.102:8080 weight=2 max_fails=3 fail_timeout=15s;
        server 10.0.1.103:8080 backup;  # 备用节点
        zone backend_zone 64k;  # 共享内存区
    }

    # 反向代理配置
    server {
        listen 80 reuseport;  # 端口复用提升性能
        server_name yourdomain.com;

        # 安全响应头
        add_header X-Content-Type-Options "nosniff";
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

        location / {
            proxy_pass http://backend_cluster;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 性能优化参数
            proxy_buffer_size 16k;
            proxy_buffers 256 16k;
            proxy_busy_buffers_size 64k;
            proxy_connect_timeout 2s;
            proxy_read_timeout 30s;
        }

        # 健康检查端点
        location /nginx_status {
            stub_status;
            allow 127.0.0.1;
            deny all;
        }
    }
}

关键优化说明

  1. 负载均衡策略

    • least_conn:动态分配请求到最空闲的后端
    • 权重配置:weight参数实现差异化流量分配
    • 故障转移:max_failsfail_timeout自动隔离故障节点
  2. 性能增强

    \text{理论最大并发量} = \text{worker\_processes} \times \text{worker\_connections}
    

    • reuseport:减少锁竞争,提升吞吐量
    • 缓冲区优化:防止代理过程中内存溢出
    • TCP优化:tcp_nopush+tcp_nodelay减少网络延迟
  3. 健康监控

    # 验证配置
    nginx -t
    
    # 查看实时状态
    curl http://localhost/nginx_status
    

    输出示例:

    Active connections: 23 
    server accepts handled requests
    456789 456789 912345 
    

部署建议

  1. Linux内核优化

    # 增加端口范围
    echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
    
    # 扩大连接跟踪表
    echo "net.netfilter.nf_conntrack_max = 262144" >> /etc/sysctl.conf
    sysctl -p
    

  2. SSL/TLS优化 (如需HTTPS)

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_buffer_size 4k;  # 减少首次往返延迟
    

  3. 动态扩展

    • 使用consul-template实现服务发现
    • 通过Prometheus+Grafana监控QPS和延迟

此配置支持$10,000+$ QPS(单节点),实际性能需根据服务器规格和业务负载测试调整。建议使用wrk工具进行压力测试:

wrk -t12 -c400 -d30s http://yourdomain.com

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐