需启用proxy_cache_purge模块并严格匹配cache_key:先定义proxy_cache_path和proxy_cache,再配置/purge location限制IP,确保proxy_cache_key与purge请求的key完全一致,最后用curl触发清理。

要实现后端内容更新后主动清理 Nginx 代理缓存,需启用并正确配置 proxy_cache_purge 模块(Nginx 官方版本不内置,需编译时添加或使用 OpenResty/Tengine 等集成版本)。
确认模块已启用并配置缓存区域
该模块依赖于已定义的缓存区(proxy_cache_path),且 purge 操作必须与缓存 key 的生成逻辑严格一致。确保 Nginx 编译时包含 --with-http_proxy_cache_purge_module,或使用已集成该模块的发行版。
在 http 块中定义缓存路径,并启用缓存:
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
在 server 或 location 块中启用缓存及 purge 支持:
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri"; # 关键:purge 时需匹配此规则
}配置 purge 接口并限制访问权限
通过独立 location 暴露 purge 功能,仅允许可信来源(如本地运维脚本、CI/CD 部署服务)调用,避免被恶意利用清空全部缓存。
示例配置(放在同一 server 块内):
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
location ~ /purge(/.*) {
allow 127.0.0.1; # 仅允许本机触发
allow 10.0.1.50; # 或指定部署服务器 IP
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}注意:$1 对应正则捕获的路径部分,例如请求 GET /purge/api/v1/users 会尝试清除 key 为 httpsGETexample.com/api/v1/users 的缓存项(需与 cache_key 完全一致)。
触发缓存清理的常用方式
后端发布新内容后,可通过 HTTP 请求调用 purge 接口。推荐使用 curl 或自动化工具发送 POST 或 GET 请求(模块默认支持 GET,部分版本也支持 PURGE 方法)。
- 清除单个 URL 缓存:
curl -X GET "http://example.com/purge/api/article/123" - 清除带参数的 URL(需确保 cache_key 包含 query):
proxy_cache_key "$scheme$request_method$host$request_uri";,然后请求/purge/api/search?q=test - 若需通配清除(如某目录下全部内容),需配合自定义 Lua 脚本(OpenResty)或外部缓存管理服务,原生
proxy_cache_purge不支持正则或前缀批量删除
验证 purge 是否生效
清理后可通过响应头判断是否命中缓存:
- 返回
X-Proxy-Cache: MISS或无该头 → 缓存已清,下次请求将回源 - 返回
X-Proxy-Cache: HIT→ 缓存仍存在,检查proxy_cache_key与 purge 请求中的 key 是否完全一致(包括大小写、斜杠结尾、协议、方法) - 查看缓存目录文件是否存在:
find /var/cache/nginx/proxy_cache -name "*$(echo -n 'httpsGETexample.com/path' | md5sum | cut -d' ' -f1)*"
常见失败原因:key 不匹配、IP 被拒绝、location 未继承 cache zone、purge 路径未加 / 导致正则不匹配。










