核心是使用ngx_cache_purge模块实现精准主动清理;该模块须静态编译进Nginx,配置时需与proxy_cache共用zone且key严格对齐,并通过PURGE请求触发清除。

要实现基于第三方模块的代理缓存主动清理,核心是使用 ngx_cache_purge 模块——它不是 Nginx 原生功能,但能精准按 URI、参数或自定义 key 删除 proxy_cache 中的特定条目。
必须静态编译进 Nginx
该模块不支持动态加载,安装需在编译阶段集成:
- 从 GitHub 获取稳定分支(如
release/v2.5+):git clone --depth 1 https://github.com/FRiCKLE/ngx_cache_purge.git
- 配置 Nginx 编译时加入模块路径:
./configure --add-module=/path/to/ngx_cache_purge [其他参数...] make && sudo make install
- 验证是否生效:
nginx -V 2>&1 | grep cache_purge
有输出即表示成功。
aperture: the L402 aware reverse proxy下载安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
配置 purge 接口需与 proxy_cache 严格对齐
关键点在于缓存 key 必须一致,否则 purge 无法命中:
- 在
http块中定义缓存区(含keys_zone名称):proxy_cache_path /var/cache/nginx/my_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
- 在
location块中启用 purge,并限制访问来源:location ~ ^/purge(/.*)$ { allow 127.0.0.1; allow 10.0.0.0/8; deny all; proxy_cache_purge my_cache "$scheme$host$1$is_args$args"; }注意:
$1是正则捕获的路径部分,$scheme$host$1$is_args$args必须和你proxy_cache_key的值完全一致(例如若proxy_cache_key是$host$request_uri,这里就要用$host$1$is_args$args)。
执行主动清除操作很简单
只需发一个 PURGE 方法的 HTTP 请求:
- 清首页:
curl -X PURGE http://example.com/purge/
- 清带参数的接口:
curl -X PURGE "http://example.com/purge/api/user?id=123"
- 返回状态说明:
200 表示 purge 动作已执行(无论原缓存是否存在)
404 表示未找到对应缓存 key
405 表示请求方法不被允许(检查是否误用了 GET/POST)
不能依赖 purge 模块做定时清理ngx_cache_purge 只响应手动或程序触发的 PURGE 请求,不具备定时扫描或自动过期清理能力。若需定期清理冷数据,应靠 proxy_cache_path 的 inactive 参数,由 Nginx 自身的 cache manager 进程完成;若需精确按 TTL 清理过期文件,则需外部脚本配合解析缓存元数据。

















