Nginx 无原生 proxy_cache_usage 变量或指标;其缓存使用率需通过 du 查磁盘占用并对比 max_size 手动估算,辅以日志分析和定时脚本提升可观测性。

macOS 下 Nginx 的 proxy_cache_usage 并不是一个内置的、可直接通过变量或状态模块输出的实时使用率指标。Nginx 官方不提供类似 Redis 的 used_memory_percent 那样的缓存占用百分比统计,proxy_cache_usage 也**不是 Nginx 的标准变量或指令**——它常被误传为可用指标,实际并不存在于 Nginx 源码或文档中。
为什么没有 proxy_cache_usage?
Nginx 的代理缓存(proxy_cache)基于文件系统存储,其“使用率”需依赖外部手段估算:
- Nginx 本身只提供缓存命中/未命中计数(通过
ngx_http_proxy_module的日志变量如$upstream_cache_status) - 缓存路径(
proxy_cache_path指定的目录)的实际磁盘占用需由系统命令(如du、df)获取 - 没有运行时 API 或 stub_status 扩展直接暴露“已用/总容量百分比”
如何估算代理缓存使用率?
在 macOS 上,可通过组合 Nginx 配置与 shell 命令实现近似统计:
-
确认缓存路径:检查 Nginx 配置中
proxy_cache_path的levels和path,例如:proxy_cache_path /usr/local/var/nginx/cache levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m;
则缓存根目录为/usr/local/var/nginx/cache -
计算当前磁盘占用:运行
du -sh /usr/local/var/nginx/cache | awk '{print $1}'
得到类似324M的值 -
对比 max_size 设置:若配置中
max_size=1g,而当前占 324M,则粗略使用率 ≈ 32%(注意:max_size是软限制,内核/文件系统可能允许短暂超限) -
注意 macOS 特性:APFS 卷可能启用空间共享或压缩,
du结果反映逻辑大小,df显示物理占用,二者可能不一致;建议统一用du -sh评估缓存目录自身大小
增强可观测性的实用方法
虽无原生 proxy_cache_usage,但可通过以下方式提升缓存状态可见性:
-
启用缓存日志:在
location或server块中添加log_format cache '[$time_local] $upstream_cache_status $upstream_http_content_length';<br>access_log /usr/local/var/log/nginx/cache.log cache;
可分析 HIT/MISS/BYPASS 频次,间接判断缓存有效性 -
定期采集脚本:写一个 macOS 兼容的 shell 脚本(如
cache-usage.sh),用du+df+date输出时间戳和占比,配合launchd定时执行并写入日志 - 配合第三方工具:使用 stub_status(需编译时启用)获取请求级统计;或接入 Prometheus + nginx-lua-prometheus(需 OpenResty)采集缓存命中率等指标
常见误区提醒
避免被误导性信息影响配置与排障:
-
$proxy_cache_usage、$upstream_cache_usage等变量不存在,Nginx 启动会报错“unknown variable” - 缓存清理不等于释放磁盘空间:
proxy_cache_path ... inactive=60m仅标记过期,真正删除由 Nginx worker 进程异步执行,du结果可能延迟下降 - macOS 默认没有
nginx -V显示模块列表?可用nginx -V 2>&1 | grep -o with-http_stub_status_module检查是否支持状态页










