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

Nginx 优化清单:从系统层到配置层的完整实操顺序

网上零散的 Nginx 优化技巧很多,但顺序错了收益减半。本文给出一条从内核参数、连接模型到缓存与压缩的完整实操路线,附常见误区和取舍建议。

顺序比技巧更重要

Nginx 优化不是把网上的参数抄一遍。系统层的限制没解开,配置层调得再细也发挥不出来;反过来,系统层调好了但配置有硬伤,同样白搭。

合理的顺序是:内核参数 → 连接模型 → 缓冲区与超时 → 缓存与压缩 → 日志与监控。每一层解决完再进下一层,收益才叠加得起来。

系统层:先解开枷锁

最常被忽略的是文件句柄和连接队列。nofile 太小,worker_connections 设再大也没用;somaxconn 太小,高并发下新连接会被丢弃。

  • fs.file-max 与 nofile 提到业务所需的两倍以上
  • net.core.somaxconn 适当调大,配合 Nginx backlog
  • tcp_tw_reuse 等 TIME_WAIT 相关参数按场景开启
  • 确认网卡队列与中断分配,避免单核软中断打满

这些改完,先压一轮,看连接建立是否顺畅、有无丢包。这一步没做,后面都是空中楼阁。

配置层:连接、缓冲、超时三件套

worker_processes 用 auto,worker_connections 结合 nofile 给足。keepalive_timeout 按业务形态定:静态站可以长一点,动态接口短一点,减少空闲连接占用。

缓冲区是重灾区。client_body_buffer_size 太小会写临时文件,proxy_buffer 太小会让大响应体走磁盘。原则是按请求体和响应体的实际分布取值,别照抄别人的数字。

反向代理场景里,upstream 的 keepalive 一定要配,否则回源短连接会把后端拖垮。同时注意 proxy_http_version 1.1 和 Connection 头,否则连接池不生效。

缓存与压缩:收益明显但要防踩坑

静态资源开 expires 和 gzip,能明显降低带宽和响应时间。但 gzip 不是所有内容都适合,图片、视频再压收益很小还费 CPU;gzip_static 配合预压缩文件更省资源。

缓存方面,proxy_cache 适合可缓存的接口和页面,但要处理好缓存键和过期策略,否则会串数据。压测时对比开缓存前后的 QPS 和回源量,收益一目了然。

如果站点面向亚太用户、以静态分发和反代为主,硬件上留足带宽和 IO 能省掉很多调优功夫。香港自营站群③ 这类 16 核 32G 的独立服务器,在多站点分发场景下,连接数和资源都比较从容,配置调优的空间也更大。

日志与监控:别让优化只停留在压测

上线后要有监控,看 QPS、延迟、错误率、连接数、回源量。日志开 buffer 异步刷盘,减少 IO 干扰。定期回顾基线的变化,才能发现配置是否随业务增长而失效。