2026-09-18 16:43 1003 次浏览

Nginx 性能调优实战:几处配置改动让并发能力翻倍

本文从 worker 进程、连接数、文件描述符到缓冲区与压缩,分享几处能立刻生效的 Nginx 性能调优配置,并给出验证方法,帮助站长在不换硬件的前提下把并发能力提上去。

先搞清楚 Nginx 到底卡在哪

很多人一提到 Nginx 慢,第一反应是加内存换 CPU。其实大部分场景下,瓶颈根本不在硬件,而在几个默认值上。Nginx 默认的 worker_connections 是 512,worker_processes 是 1,这套配置放在今天随便一台机器上都是浪费。

调优之前先看两个数:nginx -V 看编译参数,top -H -p 主进程号 看 worker 线程的 CPU 分布。如果只有一个 worker 在跑满,说明进程数没配好;如果每个 worker 的 CPU 都不高但请求排队,那多半是连接数或文件描述符卡住了。

四个立刻能改的核心参数

  • worker_processes auto; 让 Nginx 按 CPU 核数自动开进程,别写死成 1。
  • worker_connections 10240; 单进程可处理连接数,配合上面的进程数,理论上限就是两者相乘。
  • worker_rlimit_nofile 65535; 这个要写在 events 块外面,否则系统层面的 fd 限制会先把连接掐断。
  • use epoll; multi_accept on; Linux 下用 epoll 事件模型,并允许一次接受多个新连接,高并发下差别很明显。

改完记得同步调整系统限制:ulimit -n 65535,以及 /etc/security/limits.conf 里的 nofile。只改 Nginx 不改系统,等于白改。

缓冲区和压缩:省带宽也省时间

静态资源站点重点看这几个:sendfile on; 走零拷贝,tcp_nopush on; 配合 sendfile 减少网络报文数,keepalive_timeout 65; 保持长连接别设太短。

gzip 要开,但别什么类型都压。建议只压文本类:gzip_types text/plain text/css application/json application/javascript;,图片视频本身已压缩,再压只是浪费 CPU。gzip_comp_level 用 5 左右就够,调到 9 收益很小。

如果你的业务面向海外用户,源站放在离用户近的机房里,效果比在 Nginx 上抠参数更直接。像 香港站群服务器 这类多 IP 机型,适合多站点分流的场景,单机扛不住时用多机分摊更实在。

改完怎么验证有没有效果

别凭感觉。用 ab -n 10000 -c 500wrk 压一遍,看 Requests per second 和失败率。再看 ss -s 的 TIME_WAIT 数量,如果 TIME_WAIT 堆到几万,说明连接复用没做好,可以开 keepalive_requests 调大一点。

最后提醒一句:调优是循环。每次只改一两个参数,压测,记录,再改。一次性改十几项,出了问题根本不知道是哪条引起的。