Nginx优化核心是减少无谓I/O、传输量和响应延迟,精准匹配资源特性:按类型分级缓存(CSS/JS用immutable,图片30d,HTML/JSON禁长期缓存);启用sendfile+tcp_nopush提升传输效率;限制open_file_cache防溢出;关闭高频资源access_log;仅对文本类资源启用gzip且设合理级别与阈值。

核心是让 Nginx 少做无谓的 I/O、减少传输量、加快响应路径,同时避免缓存误用或资源浪费。优化资源配置比不等于一味堆内存或开大缓冲区,而是精准匹配静态资源特性与访问模式。
精配缓存策略,按文件类型分级控制
不同资源生命周期差异极大,统一设 30 天缓存反而导致更新失效或重复拉取:
-
CSS/JS/字体:加版本号或哈希(如
app.a1b2c3.js),配合expires max或Cache-Control: public, immutable,浏览器永久缓存,Nginx 不再校验 -
图片(jpg/png/webp):设
expires 30d,不启用immutable,兼顾 CDN 兼容性与更新灵活性 -
HTML/JSON 接口响应:禁用长期缓存,用
proxy_cache_valid 200 304 1m+Cache-Control: no-cache, must-revalidate,防止页面陈旧
启用高效传输机制,降低内核拷贝开销
对磁盘文件服务,绕过用户态拷贝能显著节省 CPU 和上下文切换:
- 开启
sendfile on:直接由内核将文件从磁盘送入 socket 缓冲区 - 搭配
tcp_nopush on:等 sendfile 数据填满 TCP 包再发,减少小包数量 - 慎用
tcp_nodelay off(即默认关闭):避免 Nagle 算法干扰首屏关键资源(如 CSS/JS)的及时送达
限制文件句柄与内存缓存范围,防资源溢出
Nginx 默认会为每个打开的文件缓存元数据,但无节制缓存反而拖慢系统:
- 用
open_file_cache max=1000 inactive=30s控制缓存条目上限和空闲淘汰时间 - 配
open_file_cache_valid 60s定期验证文件是否存在,避免 stale 缓存 - 禁用
access_log对图片、字体等高频资源(location ~* \.(png|woff2|svg)$ { access_log off; }),减少磁盘写压力
压缩只作用于可收益文本,规避无效开销
不是所有资源都适合 gzip,盲目开启反而增加 CPU 负担:
- 仅对
text/html、application/javascript、text/css、application/json启用gzip_types - 设置
gzip_min_length 1024,跳过极小文件(如 favicon.ico),省去压缩判断成本 - 压缩级别选
gzip_comp_level 4–5:平衡速度与压缩率,级别 6+ 对 CPU 消耗陡增,收益却趋缓


















