Nginx 的 proxy_cache_path 不支持单路径磁盘上限,需用 max_size 限制总用量(如 max_size=2g),配合 inactive(如 inactive=60m)清理久未命中的缓存;macOS 下推荐缓存路径为 /usr/local/var/cache/nginx。

在 macOS 下使用 Nginx 时,proxy_cache_path 指令本身**不支持直接限制单个缓存路径的磁盘空间上限(如“最多用 2GB”)**,它只通过 levels、keys_zone 等参数定义缓存结构和内存元数据区大小。真正控制磁盘用量的是 inactive 和 max_size 两个关键参数,而 max_size 是唯一能限制整个缓存路径总磁盘占用的配置项。
必须设置 max_size 才能限制磁盘用量
max_size 是启用磁盘用量硬限制的必要条件。Nginx 只有在指定了该参数后,才会在后台周期性检查缓存目录,并自动清理超出容量的部分(按 inactive 时间优先淘汰)。未设置 max_size 时,缓存会持续增长直至填满磁盘。
- 语法示例:
proxy_cache_path /usr/local/var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=2g inactive=60m use_temp_path=off; -
max_size=2g表示该缓存路径最多占用 2GB 磁盘空间 - 注意单位:支持
k、m、g(大小写不敏感),不能写成2G或2 GB
inactive 决定“多久不用就可被清理”
inactive 不是过期时间,而是“最后一次被访问后,多长时间内未再被命中,就视为过期并允许删除”。它配合 max_size 工作:当磁盘用量接近 max_size 时,Nginx 优先清理 inactive 时限已过的缓存文件。
- 例如
inactive=30m:一个缓存文件若连续 30 分钟没被任何请求命中,就可能被删 - 该值不宜设得太小(如
1m),否则缓存命中率骤降;也不宜过大(如24h),可能导致max_size长期超限 - 典型值:5m~2h,视业务内容更新频率和缓存价值调整
macOS 特别注意事项
macOS 默认文件系统(APFS)对小文件性能友好,但 Nginx 缓存会产生大量小文件(尤其 levels=1:2 时),需关注实际磁盘行为:
- 确保缓存目录所在卷有足够空间 ——
max_size是软目标,Nginx 清理有延迟,瞬时可能略超 - 避免将缓存放在
/tmp或/var/folders/...等系统临时目录:这些位置可能被 macOS 自动清理,或受 SIP 限制 - 推荐路径:
/usr/local/var/cache/nginx(需提前sudo mkdir -p并chown _www:_www或对应 Nginx 用户) - 验证是否生效:修改配置后
sudo nginx -t && sudo nginx -s reload,再用du -sh /path/to/cache观察增长趋势
没有“按路径配额”的替代方案
Nginx 不支持为不同 proxy_cache_path 设置独立磁盘限额(比如 A 路径限 1G,B 路径限 500M)。若需精细控制,只能:
- 拆分为多个独立的
proxy_cache_path,各自配max_size,并在proxy_cache指令中按 location 分流使用 - 借助 macOS 的磁盘配额(quota)机制 —— 但 APFS 目前不支持用户级配额,仅企业级 Xsan 或 HFS+ 旧系统可用,不推荐
- 用定时脚本监控
du输出,超限时手动rm -rf(破坏缓存一致性,仅应急)










