Skip to content

⚡ 性能优化

worker_processes 与 worker_connections

Nginx 的性能很大程度上取决于这两个参数。worker_processes 是工作进程数,worker_connections 是每个进程能处理的最大连接数。

nginx
# 自动匹配 CPU 核心数(推荐)
worker_processes auto;

# 每个 worker 的最大连接数
events {
    worker_connections 4096;
    # Linux 2.6+ 用 epoll(性能最好)
    use epoll;
    # 一个 worker 能同时处理多个连接(必须开)
    multi_accept on;
}

http {
    # 每个 worker 的最大打开文件数(要大于 worker_connections)
    worker_rlimit_nofile 65535;

    # ... 其他配置
}

💡 提示: 💡 最大并发数 = worker_processes × worker_connections。比如 4 核 CPU + 4096 连接 = 理论最大 16384 个并发连接。实际能达到 80% 左右就很不错了。

keepalive 连接复用

nginx
http {
    # 与客户端的 keepalive
    keepalive_timeout 65;
    keepalive_requests 1000;  # 一个连接最多处理多少请求

    # 与上游服务器的 keepalive(反向代理场景)
    upstream backend {
        server 10.0.0.1:8080;
        server 10.0.0.2:8080;

        # 与上游保持 32 个空闲连接
        keepalive 32;
        keepalive_requests 100;
        keepalive_timeout 60s;
    }

    server {
        location /api/ {
            proxy_pass http://backend;

            # 必须加上这些 header 才能让 keepalive 生效
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }
}

💡 提示: 💡 效果:开启 keepalive 后,Nginx 和后端之间不需要每次都重新建立 TCP 连接。对于高频 API 调用,延迟能降低 30-50%。

缓冲区调优

nginx
http {
    # 客户端请求缓冲(大文件上传场景)
    client_body_buffer_size 16k;
    client_header_buffer_size 1k;
    client_max_body_size 100m;    # 最大上传大小
    large_client_header_buffers 4 8k;

    # 代理缓冲(反向代理场景)
    proxy_buffer_size 4k;
    proxy_buffers 8 16k;
    proxy_busy_buffers_size 32k;

    # 后端响应缓冲
    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 8 32k;
    proxy_max_temp_file_size 1024m;

    # 文件发送优化(sendfile + tcp_nopush)
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}

💡 提示: 💡 sendfile + tcp_nopush:让内核直接在磁盘和网卡之间传输数据,不需要经过用户空间。大文件传输性能提升 2-3 倍。