Nginx配置静态资源expires缓存规则提速
时间:2026-11-14 07:13 作者:emer 分类: Nginx
前言
图片、CSS、JS、字体等静态资源每次都向服务器重新请求,浪费带宽也拖慢页面。Nginx 的 expires 指令通过设置 Cache-Control 过期时间,让浏览器本地缓存静态资源,重复访问不再回源,配合版本号可解决更新不刷新问题。本文给出按类型设置缓存、html 不缓存、版本号破缓存、重载验证的完整配置。
操作步骤
1. 在 server 或 http 块添加缓存规则
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
2. HTML 不缓存,保证及时更新
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache";
}
3. 图片单独设更长缓存
location ~* \.(png|jpg|jpeg|gif|webp|svg)$ {
expires 90d;
add_header Cache-Control "public";
}
4. 带版本号的资源长期缓存
location ~* \.(css|js)\?v=[0-9.]+$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
5. 校验并重载
nginx -t
nginx -s reload
6. 浏览器验证响应头
curl -I https://域名/style.css
响应头出现 Cache-Control 和 Expires 即生效。
常见坑
- 把 HTML 也长期缓存,内容更新后访客看到旧页面。
- 缓存时间过长,静态文件更新后浏览器仍用旧版,需加版本号 hash。
- 正则写错导致动态接口被当成静态缓存。
- CDN 已缓存源站,Nginx expires 只影响浏览器,源站更新需刷新 CDN。
- immutable 只对带版本号资源使用,避免误伤。
- add_header 在 location 内会覆盖上层的其他 add_header,注意合并。
- 移动端强缓存配合 Service Worker 时要统一策略。
总结
expires 按资源类型分层缓存:图片字体长缓存、CSS/JS 中长缓存、HTML 不缓存。更新靠文件名版本号或 hash 破缓存,而不是缩短缓存时间。配置后用 curl 看响应头确认,再结合 CDN 刷新策略形成完整缓存链。
遇到问题加QQ23979811 协助处理