nginx中应按资源类型精准设置expires与cache-control:静态资源(js/css/图片)用哈希文件名配合expires 1y和immutable;html禁用强缓存或设短时效;须按location精细配置并验证响应头。

在 Nginx 中正确设置 Expires 响应头,能显著提升静态资源的浏览器缓存效率,减少重复请求和带宽消耗。关键不在于“设得越长越好”,而在于匹配资源更新频率与业务发布节奏。
静态资源(JS/CSS/图片)设为长期缓存
这类文件通常通过文件名哈希(如 app.a1b2c3.js)实现版本控制,内容变更即文件名变化。因此可安全启用强缓存:
- 使用
expires 1y;或add_header Expires ...;设置一年有效期 - 配合
add_header Cache-Control "public, immutable, max-age=31536000";(推荐,immutable防止浏览器在 F5 时发条件请求) - 确保资源路径含哈希值,否则缓存过期前用户无法获取更新
HTML 文件建议禁用强缓存
HTML 通常是入口页,内容常随业务逻辑更新,但文件名不变。若缓存太久,用户可能加载旧版页面:
- 设为
expires -1;或add_header Cache-Control "no-cache, must-revalidate, max-age=0"; - 也可用短时效(如
expires 10m;),兼顾首屏加载与及时更新 - 若使用服务端渲染或 CDN 动态注入版本号,可考虑
Cache-Control: public, max-age=60
区分 location 精确控制不同资源类型
避免全局 expires 指令误伤动态接口或 HTML。推荐按路径或后缀精细配置:
-
不要 在
server块顶层写expires 1h; - 在
location ~* \.(js|css|png|jpg|gif|ico|woff2?)$中设长期缓存 - 在
location = /index.html或location /api/中关闭强缓存 - 注意正则匹配优先级:精确匹配(
=) > 长前缀 > 正则,合理安排顺序
验证与调试技巧
配置生效后务必验证响应头是否符合预期:
- 用
curl -I https://example.com/app.js查看Expires和Cache-Control - Chrome DevTools → Network → 刷新后检查资源 Size 列:显示
from disk cache或from memory cache表示命中缓存 - 注意:本地测试时禁用开发者工具的 “Disable cache” 选项,否则会绕过缓存逻辑
- 修改配置后执行
nginx -t && nginx -s reload,避免 reload 失败导致服务中断










