在linux上用nginx配置浏览器端文件缓存需通过expires指令配合add_header cache-control,按后缀或目录精准匹配静态资源,分类型设置过期时间(如带哈希资源1年、图片30天、html立即过期),并验证响应头及浏览器缓存状态。

在 Linux 上用 Nginx 配置浏览器端文件缓存过期时间,核心是通过 expires 指令配合 add_header Cache-Control,精准匹配静态资源并设置合理策略。它不依赖系统级设置,而是由 Nginx 在响应头中直接控制浏览器行为。
精准匹配静态资源路径或后缀
避免全局或模糊匹配,防止 HTML、API 等动态内容被误缓存:
- 按后缀匹配(推荐用于分散存放的资源):
location ~* \.(js|css|png|jpg|gif|woff2|svg|ttf|eot)$ { ... } - 按目录前缀匹配(适合统一放在 /static/ 或 /assets/ 下):
location ^~ /static/ { ... }(性能更高,且不支持正则,更安全) - 禁止写
location / { expires 1d; }或location ~ \.html$,否则可能长期缓存页面,导致更新不生效
按资源稳定性分类型设过期时间
缓存时长取决于是否带版本标识(如哈希值),不是越长越好:
- 带哈希的 JS/CSS(如
main.a1b2c3.js):expires 1y;或expires max; - 图片、字体、图标等稳定但无哈希的资源:
expires 30d;(约 2592000 秒) - 未做版本管理的通用资源(如
logo.png):expires 1h;到expires 1d;更稳妥 - HTML、PHP、JSON 等动态内容:
expires epoch;(立即过期)或expires -1;
必须手动补全 Cache-Control 头
expires 只生成 Expires 响应头,现代浏览器优先信任 Cache-Control,需显式添加:
- 对带哈希资源:
add_header Cache-Control "public, immutable, max-age=31536000"; - 对普通图片/字体:
add_header Cache-Control "public, max-age=2592000"; - 对 HTML 页面:
add_header Cache-Control "no-cache, must-revalidate, max-age=0"; - 注意:
add_header同一作用域下多次声明会覆盖,务必合并为一条
配置后必须验证是否生效
改完不能直接上线,要逐层确认:
- 语法检查:
nginx -t,确保配置无误 - 重载服务:
nginx -s reload(或systemctl reload nginx) - 查看响应头:
curl -I https://your-domain/style.css,确认同时存在Expires和Cache-Control - 浏览器验证:打开 DevTools → Network → 刷新资源,观察状态码是否为
304(协商缓存)或显示from memory cache/from disk cache











