手动删除缓存最直接但易误删,自动过期省心却存在更新延迟,二者结合最佳:手动清指定文件或全量清理,配合proxy_cache_valid设响应有效期、inactive设冷数据清理时限,并定期脚本清理+响应头验证。

直接删缓存文件最干脆,但容易误删或遗漏;自动过期更省心,但旧内容可能在过期前就该更新。两者配合用效果最好。
手动删除缓存文件
缓存实际是存在磁盘上的文件,路径由 proxy_cache_path 指令指定,比如:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
这意味着所有缓存文件都落在 /var/cache/nginx 目录下,按哈希结构分层存放。
- 清空全部缓存:运行
sudo rm -rf /var/cache/nginx/*(注意路径要和配置一致) - 只删某类内容:用
find精准匹配,例如按 URL 片段查找后删除:find /var/cache/nginx -type f -name "*example.com/path*" -delete - 操作前建议先停掉 Nginx 写入(
sudo nginx -s stop),避免删到正在写入的临时文件 - 删完记得
sudo systemctl reload nginx,让 Nginx 重建缓存索引
自动过期机制
Nginx 不会一直留着缓存,靠 proxy_cache_valid 和 inactive 两个参数控制“什么时候该扔”:
-
proxy_cache_valid 按响应状态码设定有效期,例如:
proxy_cache_valid 200 301 302 10m;→ 成功响应缓存 10 分钟 -
inactive 是在 proxy_cache_path 里设置的,比如:
inactive=30m→ 30 分钟内没被访问过的缓存条目,会被后台进程自动清理 - 这两个不冲突:一个管“最多活多久”,一个管“冷数据多久扫一次”
- 注意:
inactive清理由 Nginx manager 进程执行,不是实时的,通常有几分钟延迟
组合使用更稳妥
纯靠自动过期,可能等不及就出问题;全靠手动删,又难保证精准及时。推荐这样搭配:
- 把
inactive设为合理值(如 1–2 小时),让冷缓存自然退场 - 对关键页面或发布后的内容,用
purge模块或脚本立即清除(需提前配置) - 定期跑清理脚本,比如每天凌晨删掉超过 24 小时的缓存文件:
find /var/cache/nginx -mmin +1440 -delete - 加个响应头方便验证:
add_header X-Cache-Status $upstream_cache_status;,看请求是否真走了缓存











