nginx通过压缩与缓存协同优化响应速度:gzip压缩文本类资源并精准配置参数,浏览器端按资源类型差异化设置缓存策略,反向代理启用proxy_cache分级缓存,辅以sendfile、tcp_nopush等系统级i/o优化。

Nginx 中通过压缩与缓存提升响应速度,核心在于减少传输体积和避免重复处理。两者不是二选一,而是协同生效:压缩降低单次传输量,缓存减少重复生成与传输次数。实际优化中,先压再缓,效果叠加明显。
启用 Gzip 压缩降低传输体积
Gzip 是最成熟、兼容性最好的文本压缩方式,对 HTML、CSS、JS、JSON 等文本类响应效果显著。关键不在“开不开”,而在“怎么开得准”:
-
只压缩有意义的内容:设置
gzip_min_length 1k,避免小文件压缩反而增大体积(如空响应或极短 JSON) -
合理选择压缩等级:
gzip_comp_level 5是平衡点;从 1 到 5 体积下降明显,6 以上 CPU 开销陡增但收益微弱 -
明确压缩类型范围:至少覆盖
text/plain text/css application/javascript application/json;不建议压缩图片、视频等已压缩格式 -
确认生效方式:检查响应头是否含
Content-Encoding: gzip,无此头说明未触发压缩
配置浏览器端缓存控制策略
让浏览器记住哪些资源能长期复用,是零成本提速手段。重点是按内容性质差异化设置:
-
静态资源(JS/CSS/字体/图标):用
expires 1y或add_header Cache-Control "public, immutable, max-age=31536000",配合文件哈希命名实现“永不过期” -
HTML 页面:设为
no-cache或max-age=0, must-revalidate,强制每次校验,避免内容陈旧 -
API 接口(JSON/XML):根据业务敏感度决定,多数设
no-store或max-age=30秒级缓存 -
SVG 图片:可视为代码资源,同样适用
immutable,因内容极少变动且体积小
启用反向代理缓存减轻后端压力
当 Nginx 作为反向代理时,缓存后端响应能直接拦截大量重复请求。适用于 API、动态页面、图片处理等场景:
-
定义缓存区:使用
proxy_cache_path指定路径、内存 zone 名称(如my-cache)、大小与淘汰策略 -
绑定 location:在对应
location块中启用proxy_cache my-cache,并用proxy_cache_key精确区分缓存项(如含 query 参数) -
分级设置过期时间:例如
proxy_cache_valid 200 302 10m、404 1m、any 5m,避免错误响应长期滞留 -
支持后台更新:搭配
stale-while-revalidate,缓存过期后仍可返回旧内容,同时异步刷新,用户无感知
配合系统级文件描述符与传输优化
压缩与缓存效果最终依赖底层 I/O 效率:
- 开启 sendfile:用内核零拷贝代替用户态读写,大幅减少 CPU 和内存拷贝开销
- 启用 tcp_nopush:配合 sendfile,将多个响应头/体合并为一个 TCP 包发出,减少网络往返
-
缓存文件元数据:
open_file_cache max=1000 inactive=20s减少 stat() 系统调用,尤其利于高并发静态服务 -
限制缓存目录层级:
levels=1:2避免单目录文件过多导致查找变慢,提升缓存命中效率











