在location块中用add_header注入强缓存头并精准匹配文件后缀是最常用有效方式,需用正则限定js/css/图片等静态资源,配合cache-control: public, max-age=31536000, immutable及always参数,启用sendfile、tcp_nopush和open_file_cache优化,并验证etag与响应头生效。

直接在 location 块中用 add_header 注入强缓存头,并配合文件后缀精准匹配,是最常用也最有效的方式。
匹配目标静态文件类型
用正则表达式限定资源范围,避免误设缓存。常见静态资源包括 JS、CSS、图片、字体等,推荐写法:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$- 若资源已带哈希指纹(如
main.a1b2c3d4.js),可更激进地匹配:location ~* "\.[a-f0-9]{8,}\.(js|css|png|jpg|gif|svg|woff2)$" - 注意大小写不敏感(
~*)和结尾锚定,防止路径干扰
注入强缓存响应头
使用 add_header 设置标准缓存策略,关键字段缺一不可:
-
Cache-Control: public, max-age=31536000, immutable—— 公开缓存、有效期 1 年、标记为不可变 -
public允许 CDN 和中间代理缓存 -
immutable告诉现代浏览器:该资源在max-age内绝不会变更,无需发If-None-Match或If-Modified-Since验证请求 - 务必加
always参数(如add_header ... always;),否则 3xx/4xx 响应默认不生效
补充基础优化项
强缓存效果依赖底层服务效率,建议同步启用:
-
sendfile on;—— 启用内核零拷贝,减少用户态复制开销 -
tcp_nopush on;—— 配合 sendfile,让 TCP 包满载再发 -
open_file_cache max=1000 inactive=20s;—— 缓存文件句柄与元数据,降低 stat 系统调用频率 - 确保资源本身支持
ETag(Nginx 默认开启)或Last-Modified,用于协商缓存兜底
验证是否生效
配置保存后重载 Nginx,用 curl 检查响应头:
curl -I https://yoursite.com/style.css- 确认返回中包含:
Cache-Control: public, max-age=31536000, immutable - 同时有
ETag或Last-Modified字段,且状态码为200(非 304) - 浏览器开发者工具 Network 标签页中,第二次访问应显示
from memory cache或from disk cache











