手动清除Nginx指定缓存文件仅有两种可靠方式:一是启用ngx_cache_purge模块通过URL触发精准清理,二是根据proxy_cache_key反推MD5哈希路径后删除对应文件;需区分proxy_cache与fastcgi_cache等不同缓存类型,避免误操作。

手动清除 Nginx 中指定缓存文件,核心在于“精准定位 + 安全触发”,不能靠猜路径或暴力删目录。真正可靠的方式只有两种:一是用 ngx_cache_purge 模块通过 URL 触发清理,二是根据缓存键(proxy_cache_key)反推哈希路径后删除对应文件。前者适合日常运维,后者用于模块不可用或调试场景。
启用 purge 模块实现 URL 级精准清理
这是最常用、最安全的手动清理方式,前提是 Nginx 已编译并启用了 ngx_cache_purge 模块。
- 确认模块已加载:
nginx -V 2>&1 | grep -o ngx_cache_purge,有输出说明可用 - 在 server 块中添加 purge location,注意
proxy_cache_purge的参数必须与实际proxy_cache_key完全一致(常见漏掉$is_args$args,导致带查询参数的 URL 清不掉):
location ~ ^/purge(/.*)$ {
allow 192.168.1.0/24; # 限制内网运维 IP,禁用 all
deny all;
proxy_cache_purge static_cache $scheme$host$1$is_args$args;
} - 执行清理请求:
curl -X PURGE https://example.com/purge/images/logo.png,返回200 OK表示命中并删除成功;404表示未缓存或 key 不匹配
手动计算哈希路径并删除单个缓存文件
当 purge 模块不可用,又必须只删某一条缓存时,可结合 proxy_cache_path 的 levels 和 proxy_cache_key 手动定位文件。
- 先查配置:
sudo nginx -T 2>&1 | grep proxy_cache_path,得到类似:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:20m;
说明缓存按两级子目录散列(如a/5f/),真实文件名是proxy_cache_key的 MD5 值 - 还原 key:例如你缓存的是
https://example.com/css/app.css,且配置中proxy_cache_key $scheme$host$request_uri,那么完整 key 就是https://example.com/css/app.css - 计算 MD5 并拆解路径:
echo -n "https://example.com/css/app.css" | md5sum→ 得到a5f3b7e2...<br>
,按levels=1:2取最后 1 位 + 接着 2 位 → 子目录为a/5f/,文件名为剩余部分3b7e2... - 进入对应路径删除:
sudo rm -f /var/cache/nginx/a/5f/3b7e2...
区分缓存类型,避免误操作
Nginx 有多个独立缓存系统,清理前务必确认目标类型:
- proxy_cache:用于反向代理后端服务(如静态资源服务器、API 后端),清理走上面两种方式
-
fastcgi_cache:用于缓存 PHP-FPM 等 FastCGI 响应,路径和 key 计算规则完全不同,需单独查
fastcgi_cache_path并用对应方法清理 - 浏览器/CDN 缓存:Nginx 本身不存储,只是响应头控制,这类不属于“Nginx 中的缓存”,不应在此范围处理
配套管理建议
手动清理不是孤立动作,需配合策略才能稳定可控:
- 清理入口加访问控制,生产环境禁止
allow all或仅限127.0.0.1 - 配置
inactive=60m和max_size实现后台自动淘汰,减少人工干预频次 - 避免使用
nginx -s reload试图清缓存——它完全不影响磁盘缓存和共享内存区 - 若需彻底重置,应
nginx -s stop→ 清目录 →nginx启动,而非 reload


















