要使proxy_cache_path真正生效,需协同路径规划、层级设计、内存索引匹配和自动清理策略:缓存根目录须独立SSD挂载并精准授权;采用levels=1:2两级目录分散文件;keys_zone按预估条目合理设置(如80万条配100m);inactive与max_size必须共用以实现LRU清理。

要让 proxy_cache_path 在反向代理层真正落地生效,不是写一行指令就完事,关键在于路径规划、层级设计、内存索引匹配和自动清理策略四者协同。配置错一个环节,缓存就可能不落盘、查不到、占满磁盘或性能反降。
缓存根目录必须独立挂载且权限精准
别把缓存目录放在 /var 或 /usr 下,更不能和日志、配置混用同一分区。系统盘 IO 争抢会拖慢缓存读写速度。推荐做法是:
- 单独挂载一块 SSD(如
/dev/nvme0n1p2)到/data/nginx_cache - 确保 Nginx 工作进程用户(如
nginx或www-data)对该目录有完整读写权限:chown -R nginx:nginx /data/nginx_cache - 挂载时禁用
noexec、nosuid,但确认该路径不在任何location的 web 可访问范围内(防止缓存文件被直接下载)
两级目录层级(levels=1:2)是稳定运行的基础
单层目录下放几十万文件,会导致 inode 查找变慢、stat 开销飙升。levels=1:2 把缓存文件打散到三级路径中,例如 /data/nginx_cache/7/f4/xxxxxxxxxx:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 第一级:取 key 的最后 1 位十六进制字符(0–f,共 16 个目录)
- 第二级:取倒数第 2–3 位(每个一级目录下最多 256 个子目录)
- 这样即使缓存总量达百万级,单个目录文件数也控制在百量级,IO 更均衡
keys_zone 大小要按真实缓存条目预估
keys_zone 是缓存元数据的内存区,不是越大越好,也不是越小越省。它直接影响 key 查找效率和最大可缓存条目数:
- 每 1MB keys_zone 约支持 8000–10000 个缓存条目(key 长度越短,密度越高)
- 若预计峰值缓存对象为 80 万个,建议设为
keys_zone=my_cache:100m - 值太小会导致频繁淘汰索引项,出现“缓存文件还在磁盘,但查不到”;值太大则浪费内存,且重启后加载慢
inactive 和 max_size 必须同时设置
只设 max_size 不设 inactive,冷数据会长期滞留;只设 inactive 不设 max_size,磁盘可能被撑爆。两者配合才能实现健康循环:
-
inactive=60m:某缓存条目连续 60 分钟未被访问,即标记为可回收(不管是否过期) -
max_size=20g:整个缓存目录上限为 20GB;超出时按 LRU 清理最久未用的缓存文件 - 生产中常见组合是
inactive=30m–2h+max_size=10g–100g,视流量与响应体大小动态调整
典型生产配置(可直接放入 http 块):
proxy_cache_path /data/nginx_cache levels=1:2 keys_zone=my_cache:128m inactive=60m max_size=20g use_temp_path=off;
搭配 use_temp_path=off 可避免临时文件拷贝,进一步降低 IO 延迟。

















