Nginx 性能调优常用参数详解

讲解 Nginx 高并发场景下的关键性能参数,包括 worker 进程数、连接数上限、keepalive 超时、缓冲区与静态文件缓存的取值思路,并给出修改与压测验证的完整步骤。

调参之前先看清楚瓶颈

Nginx 本身不是性能问题的第一嫌疑对象,绝大多数站点的瓶颈在于后端 PHP-FPM、数据库或未压缩的图片。调参前先确认当前的瓶颈:看 CPU 是否打满、连接数是否到上限、后端是否排队。盲目改参数容易把问题掩盖,反而更难定位。以下参数适合在确认 Nginx 自身是瓶颈后再动。

worker_processes 与 worker_connections

worker_processes 设为 auto,让 Nginx 自动按 CPU 核数起进程,这是目前最稳妥的取值。worker_connections 表示单个 worker 允许的连接数,默认 1024 对静态站通常够用,但站内引用多、开启 keepalive 或有较多反向代理连接时,可提到 4096 甚至更高。真正允许的最大并发约为 worker_processes × worker_connections,其中作为反向代理时要按 worker_rlimit_nofile 同步放宽文件描述符限制,否则改了也不生效。

keepalive 与超时

keepalive_timeout 控制长连接保持时长,默认 75 秒对浏览器友好;upstream 块里的 keepalive 则让 Nginx 到后端保持长连接,能显著减少 TCP 与 TLS 握手开销,值得开启。与之配套的 client_body_timeout、client_header_timeout、send_timeout 建议保持在 10-60 秒区间,过短会让慢网络用户请求失败,过长则让恶意连接占住资源。

缓冲区与请求体限制

client_max_body_size 决定允许上传的最大文件,默认 1M 对带图上传远远不够,独立站常见取值是 20M-64M,按业务上限设置即可,不必盲目放大。缓冲区参数(proxy_buffer_size、proxy_buffers)在反向代理响应头较大或后端返回慢时可微调,但如果频繁需要改,通常说明后端有问题。

静态文件缓存与压缩

为图片、CSS、JS 配置 expires 与 access_log off,让浏览器缓存长期生效,能大幅降低重复请求。开启 gzip(或模块支持的 brotli)压缩文本资源,压缩等级 4-6 之间性价比最高,再高只增加 CPU 消耗、几乎不减少体积。注意 gzip 不要压缩已压缩格式(jpg/png/mp4),白白浪费 CPU。

修改与验证流程

  1. 修改前备份配置文件,用 nginx -t 校验语法
  2. 用 systemctl reload nginx 平滑重载,不要 restart 断开长连接
  3. 修改 worker_connections 或 rlimit 时,确认 ulimit -n 与系统 fs.file-max 同步放开
  4. 压测前记录基线,压测后对比响应时间与错误率
  5. 观测一段时间无异常后再固化配置

常见误区

  • 把 worker_connections 调到数万但没改文件描述符限制,实际不生效
  • keepalive 太长导致空闲连接堆积,占满 worker 连接槽
  • 关掉 access_log 以求性能,结果出问题无日志可查
  • 只压测首页就下结论,忽略了产品页与接口的真实开销

调参的目标是稳定,不是数字好看。每次只改一到两项,改完压测对比,才能确定到底哪一项起了作用。

Previous Article

WordPress 网站安全加固清单:登录、权限与备份

Next Article

Nginx 配置 HTTPS 与证书自动续期(certbot 实操)

View Comments (3)

Leave a Comment

Your email address will not be published. Required fields are marked *