proxy_cache_min_uses 的核心作用是为缓存写入设置热度门槛:同一 key 需被重复访问指定次数才落盘,从而减少无效缓存;需配合 proxy_cache_lock、精简 cache_key、分层配置及 inactive/max_size 等策略协同生效。

proxy_cache_min_uses 的核心作用不是拦截请求,而是给缓存写入设一道“热度门槛”:只有同一缓存 key 被重复访问达到指定次数,响应体才会真正落盘。它从源头减少无效缓存条目,让磁盘空间、keys_zone 内存和 SSD 擦写资源留给真正有复用价值的内容。
静态资源路径单独配置 min_uses=2
不要在全局(http/server)块里一刀切设置,而应在匹配静态资源的 location 中精准控制:
- 用正则明确覆盖常见后缀:
location ~* \.(js|css|png|jpg|gif|webp|woff2?|ttf|svg)$ - 启用缓存并设阈值:
proxy_cache_min_uses 2;
这样首次访问仍会回源(可能 HIT 已有副本),但响应不写盘;第二次相同 key 请求才正式缓存。实测可减少 40%~60% 的无效小文件生成。
必须启用 proxy_cache_lock 防并发穿透
只设 min_uses 2 不够——若两个相同 URI 请求几乎同时到达,可能都绕过缓存、各自回源、尝试写缓存,IO 白耗。加锁后:
- 第一个请求回源 + 加锁
- 后续同 key 请求阻塞等待
- 锁释放时统一写入一次,自然满足“第 2 次”,后续全为 HIT
务必同步配置:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
proxy_cache_lock on; proxy_cache_lock_timeout 5s;
精简 proxy_cache_key 是前提
如果 key 包含 $args 或 $request_uri,那 /logo.png?v=abc 和 /logo.png?v=def 就是两个 key,永远达不到计数门槛。应主动剔除干扰参数:
- 推荐写法:
proxy_cache_key "$scheme$host$uri"; - 更稳妥写法:
proxy_cache_key "$scheme$host$uri$is_args";
这样不同版本参数指向同一 key,计数可复用,min_uses才真正生效。
按语义分层设置,避免误伤高频内容
- 首页、公共 API(如
/api/config):保持min_uses 1,天然高复用,首次缓存即合理 - 带用户标识的路径(如
/user/123):设为 2 或 3,但必须先精简 key,剔除会话类参数 - 含毫秒时间戳或随机串的上报接口(如
/log?t=1746216840&r=abc):不依赖min_uses,直接用proxy_no_cache 1或proxy_cache_bypass $arg_r $arg_t跳出缓存流程
配合 inactive 与 max_size 控制生命周期
即使少量长尾请求误入缓存,也要防止它们长期滞留:
-
inactive=1h;:1 小时内无访问即自动淘汰,避免冷数据堆积 -
max_size=500m;:限制磁盘总用量,配合 LRU 自动清理低频项 - 加一行
proxy_cache_use_stale updating;:后台更新时仍可返回旧缓存,进一步降低写入压力
不复杂但容易忽略

















