要快速清理Nginx中被污染的缓存内容,核心是启用并正确配置ngx_cache_purge模块,通过HTTP PURGE请求精准删除指定URI的缓存项,而非重启或清空整个缓存目录;该模块需编译时静态添加或动态加载,配置时须与proxy_cache共用zone、限制IP白名单,并确保purge key与cache_key严格一致。

要快速清理Nginx中被污染的缓存内容,核心是启用并正确配置 ngx_cache_purge 模块,通过 HTTP PURGE 请求精准删除指定 URI 的缓存项,而非重启或清空整个缓存目录。
确认 Nginx 已编译支持 cache_purge
该模块非官方内置,需在编译时显式添加:
–add-module=/path/to/ngx_cache_purge
若当前 Nginx 未包含该模块,直接 reload 配置无效。可通过以下命令验证:
nginx -V 2>&1 | grep -o 'cache_purge'
无输出即不支持,需重新编译或改用动态模块(Nginx 1.9.11+ 支持)加载。
配置缓存区与 purge 路由规则
在 http 或 server 块中定义缓存路径和 PURGE 方法处理逻辑:
proxy_cache_path /var/cache/nginx/mycache levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge mycache $1;
}
}
注意:
– proxy_cache_purge 后必须跟对应 keys_zone 名称和缓存 key 变量(如 $1 对应正则捕获的路径)
– 允许 PURGE 的 IP 必须严格限制,避免被恶意利用清空全站缓存
执行精准缓存清理操作
使用 curl 发送 PURGE 请求即可立即删除匹配 URI 的缓存条目:
-
清除单个页面缓存:
curl -X PURGE http://example.com/path/to/bad.html -
清除带查询参数的缓存(需确保 proxy_cache_key 包含 $args):
curl -X PURGE "http://example.com/api/data?token=abc" -
清除通配路径(需配合正则 location)**:若配置了
location ~ ^/purge/(.*)$,可发请求到/purge/path/to/清除该前缀下所有缓存
成功响应为 200 OK 或 204 No Content;返回 404 Not Found 表示该 URI 当前无缓存;405 Method Not Allowed 多因 location 未正确匹配或 method 限制未放开。
验证清理效果与规避常见陷阱
清理后立即用 curl 检查响应头中的 X-Proxy-Cache(需自行添加 header)或 Age 字段确认是否已回源:
add_header X-Proxy-Cache $upstream_cache_status;
常见问题:
– 缓存 key 不一致导致 purge 失效(例如未包含 $host、$args 或大小写敏感)
– 同一 URI 有多个缓存变体(如 gzip / br 编码),需确保 proxy_cache_key 定义覆盖所有维度
– PURGE 请求被 WAF、CDN 或反向代理提前拦截,需检查中间链路是否透传 PURGE 方法











