Nginx proxy_cache_path需独立挂载高性能磁盘、设两级目录(levels=1:2)、keys_zone按缓存规模配置(如128m支持百万级条目)、必须限定inactive与max_size实现自动清理。

要让 Nginx 的 proxy_cache 在生产环境稳定高效运行,proxy_cache_path 的配置必须兼顾可维护性、IO 性能和磁盘空间可控性。它不只是指定一个路径,而是定义缓存数据的物理组织方式与生命周期策略。
缓存根目录需独立挂载且权限明确
不要把缓存目录放在系统盘或与日志、配置混用的分区上。推荐做法是:
- 单独挂载一块 SSD 或高性能 HDD 分区(例如
/data/nginx_cache),避免与其他服务争抢 I/O 资源 - Nginx 工作进程用户(如
nginx或www-data)对该目录有完整读写权限,且禁止其他用户访问 - 目录不启用 noexec、nosuid 等挂载选项,但需确保不在 web 可访问路径下(防止被直接下载缓存文件)
两级目录层级(levels=1:2)是通用最优解
单层目录存放大量缓存文件会导致 inode 查找变慢,尤其在千万级缓存项时明显。使用 levels=1:2 表示:
- 第一级子目录名取缓存 key 的最后 1 位十六进制字符(共 16 个目录)
- 第二级子目录名取倒数第 2–3 位十六进制字符(每个一级目录下最多 256 个子目录)
- 最终文件落在形如
/data/nginx_cache/c/29/xxxxxx的三级路径中,有效分散文件密度
keys_zone 必须匹配实际缓存规模
keys_zone 是内存中缓存索引的存储区域,大小直接影响并发查找效率和最大缓存条目数:
- 每 1MB keys_zone 约支持 8000–10000 个缓存条目(取决于 key 长度)
- 若预估峰值缓存对象约 50 万个,建议设为
keys_zone=my_cache:64m - 该值不宜过大(浪费内存),也不宜过小(频繁淘汰索引,导致“缓存命中但查不到”)
必须设置 inactive 和 max_size 实现自动清理
不加约束的缓存会持续膨胀直至占满磁盘。两项参数协同控制回收行为:
-
inactive=60m:某缓存条目连续 60 分钟未被访问,就标记为可删除(不等过期时间) -
max_size=10g:整个缓存目录上限为 10GB;超出时按 LRU 清理最久未用的缓存文件 - 二者缺一不可——
inactive防止冷数据堆积,max_size防止磁盘打满
生产配置示例(可直接嵌入 http 块)
proxy_cache_path /data/nginx_cache levels=1:2 keys_zone=my_cache:128m inactive=60m max_size=20g;
该配置适用于日均缓存请求 100 万+、后端响应体平均 50KB 的中高流量场景,兼顾索引容量、目录结构与磁盘安全水位。











