优化nginx代理并发性能需从连接管理、缓冲控制、协议适配和内核协同四层面系统调优:设worker_processes auto、worker_connections 10240,配worker_rlimit_nofile 65535及ulimit -n;client_header_buffer_size 4k、large_client_header_buffers 4 8k;upstream启用keepalive 32并强制http/1.1;调大somaxconn至65535,开启sendfile等零拷贝参数。

优化 Nginx 作为 HTTP 代理时的请求并发处理性能,核心是减少每个请求在解析、转发、响应阶段的开销,并让连接复用更高效、资源调度更合理。它不只是调大 worker_connections,而是从连接管理、缓冲控制、协议适配和内核协同四个层面系统性收紧。
合理分配工作进程与连接资源
并发能力由 worker_processes × worker_connections 决定,但必须与系统资源匹配:
- 设
worker_processes auto,让 Nginx 自动匹配 CPU 核心数(如 8 核就启 8 个 worker) - 每个 worker 的连接上限建议设为
worker_connections 10240(而非默认 1024),配合worker_rlimit_nofile 65535 - 系统级需同步调整:
ulimit -n 65535,并在/etc/security/limits.conf中固化 - 启用
multi_accept on,让单次事件唤醒能接收多个新连接,避免频繁 epoll wait
精控请求头与请求体缓冲行为
代理场景下,大量请求带 Cookie、JWT 或自定义 Header,缓冲区不合理会触发重分配或 494/413 错误:
-
client_header_buffer_size 4k:覆盖 95%+ 的标准请求头(默认 1k 容易溢出) -
large_client_header_buffers 4 8k:允许最多 4 个大头(如超长 Referer 或签名头),单个上限 8k -
client_body_buffer_size 16k:够用 JSON API 请求体;若纯透传不解析,加client_body_in_single_buffer on避免分片拼接 -
client_max_body_size 100m:严格限制上传上限,超限直接返回 413,不进入后端流程
启用 Keepalive 并优化上游连接池
代理性能瓶颈常不在 Nginx 本身,而在与上游建立/断开连接的开销:
- 在 upstream 块中启用长连接:
keepalive 32;(保持 32 个空闲连接) - location 中强制使用 HTTP/1.1 + Connection: '':
proxy_http_version 1.1; proxy_set_header Connection ''; - 避免对内网上游启用 HTTP/2 —— 多数后端服务支持不稳,且内网延迟低,1.1 + keepalive 效率更高、更可靠
- 配合
keepalive_timeout 60s和keepalive_requests 1000,平衡复用收益与连接老化
协同内核参数与关闭冗余解析
底层网络栈和 Nginx 解析路径的微小开销,在百万级并发下会被放大:
- Linux 下调大
net.core.somaxconn = 65535,防止连接在内核队列堆积导致客户端重传 - 关闭无业务价值的解析逻辑:
underscores_in_headers off(除非真需下划线字段)、ignore_invalid_headers on(跳过非法 header 校验) - 启用零拷贝加速静态响应:
sendfile on; tcp_nopush on; tcp_nodelay on; - 若代理纯 API 流量,可考虑关掉 access_log 或改用 buffer 日志,减少 I/O 竞争











