清理Nginx缓存需先查清proxy_cache_path或fastcgi_cache_path路径,再按停服全清、不停服分批删或启用inactive自动清理三种方式安全操作。

清理 Nginx 磁盘上的缓存文件,关键在于先确认缓存类型和实际路径,再选择对应方式——不能一概而论用 rm -rf,否则容易误删、服务抖动或清理无效。
查清你用的是哪类缓存路径
proxy_cache 和 fastcgi_cache 的存储位置不同,配置指令也不同,必须分开处理:
- 运行
sudo nginx -T 2>&1 | grep -E "(proxy_cache_path|fastcgi_cache_path)",找出真实路径和keys_zone名称 - 常见 proxy_cache 路径如
/var/cache/nginx、/www/server/nginx/proxy_cache;fastcgi_cache 多见于/var/run/nginx-cache或自定义路径 - 注意
levels=1:2表示文件按哈希散列在多级子目录中,所以缓存文件不在根目录下,但rm -rf /path/*仍会递归清除全部
安全删除整个磁盘缓存(停写 + 清空 + 重启)
适用于发布大版本、需彻底重置所有缓存的场景,但必须暂停写入避免删到正在生成的临时文件:
- 执行
sudo nginx -s stop(不是 reload),让 worker 进程完全退出,停止一切缓存写入 - 再运行
sudo rm -rf /your/cache/path/*(把/your/cache/path替换为上一步查到的真实路径) - 最后
sudo nginx启动,Nginx 会重建缓存索引目录结构 - ⚠️ 若多个
keys_zone共用同一父目录(如都设为/var/cache/nginx),此操作会一并清掉全部缓存 zone
不停服分批清理大容量缓存(推荐用于数十 GB 场景)
直接全量 rm -rf 容易打满磁盘 I/O,导致响应延迟上升甚至 502 错误。改用可控节奏的异步清理:
- 先检查是否安全:用
lsof +D /your/cache/path确认无 Nginx 进程正打开其中文件;若无输出,说明当前无活跃写入 - 用 find 分片删除,每批删 1 万个文件后休眠 100 毫秒:
while [ $(find /your/cache/path -type f | wc -l) -gt 0 ]; do find /your/cache/path -type f -print0 | head -z -n 10000 | xargs -0 rm -f; sleep 0.1; done - 执行前建议把
rm -f换成echo预览,确认列出的全是缓存文件,防止路径误配
利用 inactive 参数让 Nginx 自动后台清理
如果缓存配置里已设置 inactive=XXm(例如 inactive=45m),Nginx worker 会在空闲时自动扫描并移除长时间未被访问的缓存项:
- 该机制完全不中断服务,也不依赖人工触发,属于“静默释放”
- 若当前配置没设 inactive,可临时加上并执行
sudo nginx -s reload生效(无需 restart) - 注意:它只清理“未被访问”的缓存,不是按过期时间(
proxy_cache_valid)清理,也不影响正在被命中的条目


















