如何通过Nginx Cache-Purge模块高效清除缓存污染的非法响应?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1114个文字,预计阅读时间需要5分钟。
《Cache-Purge模块非法响应——它只按请求URI(或带特定头)删除缓存条目,不校验响应内容是否合法。所谓缓存污染,需先定位污染源,再用purge清理对应缓存键。”
为什么 proxy_cache_purge 不会自动识别非法响应
Nginx 的缓存机制本身不解析响应体内容,也不做签名/哈希校验。即使后端返回了 200 OK 但含恶意 HTML 或错误 JSON,只要满足 proxy_cache_valid 规则,就会被无差别缓存。Cache-Purge 模块仅响应一个 purge 请求(如 GET /foo HTTP/1.1 + Cache-Control: no-cache 或自定义头),然后根据 proxy_cache_key 计算出的 key 删除磁盘上的缓存文件,不做任何内容检查。
常见误操作包括:
- 以为发个
curl -X PURGE http://example.com/bad-api就能“扫描并清除所有异常响应”——实际只删该 URI 对应的缓存(且需配置允许 PURGE 方法) - 未同步更新
proxy_cache_key,导致 purge 请求计算的 key 和缓存时的 key 不一致,删错或删不掉 - 在多级缓存(CDN + Nginx)场景下,只 purge Nginx 缓存,而污染响应早已被 CDN 固化
配置 proxy_cache_purge 的最小可靠组合
必须显式启用 purge 功能,并严格约束触发条件,否则可能引发缓存雪崩或未授权清除。
本文共计1114个文字,预计阅读时间需要5分钟。
《Cache-Purge模块非法响应——它只按请求URI(或带特定头)删除缓存条目,不校验响应内容是否合法。所谓缓存污染,需先定位污染源,再用purge清理对应缓存键。”
为什么 proxy_cache_purge 不会自动识别非法响应
Nginx 的缓存机制本身不解析响应体内容,也不做签名/哈希校验。即使后端返回了 200 OK 但含恶意 HTML 或错误 JSON,只要满足 proxy_cache_valid 规则,就会被无差别缓存。Cache-Purge 模块仅响应一个 purge 请求(如 GET /foo HTTP/1.1 + Cache-Control: no-cache 或自定义头),然后根据 proxy_cache_key 计算出的 key 删除磁盘上的缓存文件,不做任何内容检查。
常见误操作包括:
- 以为发个
curl -X PURGE http://example.com/bad-api就能“扫描并清除所有异常响应”——实际只删该 URI 对应的缓存(且需配置允许 PURGE 方法) - 未同步更新
proxy_cache_key,导致 purge 请求计算的 key 和缓存时的 key 不一致,删错或删不掉 - 在多级缓存(CDN + Nginx)场景下,只 purge Nginx 缓存,而污染响应早已被 CDN 固化
配置 proxy_cache_purge 的最小可靠组合
必须显式启用 purge 功能,并严格约束触发条件,否则可能引发缓存雪崩或未授权清除。

