use_temp_path=off可避免跨文件系统rename失败导致的缓存写入中断;需在proxy_cache_path中显式关闭,并确保缓存目录有足够空间和权限。

直接把缓存文件写进目标目录,不经过临时路径中转,就能避开跨文件系统 rename 失败的问题,提升写入成功率和响应稳定性。
为什么默认 use_temp_path=on 容易出问题
Nginx 默认先在 proxy_temp_path(比如 /var/tmp/nginx_temp)写临时文件,再用 rename 系统调用移进 cache 目录。但 rename 要求源和目标必须在同一个挂载点——如果缓存目录在 /Users/xxx/cache,而临时目录在 /var/tmp(不同磁盘或 APFS 加密卷),就会报 Invalid cross-device link (errno 18),导致缓存写入中断、响应头 X-Proxy-Cache 显示 BYPASS 或 MISS,甚至堆积大量 .tmp 文件。
如何正确启用 use_temp_path=off
只需在 proxy_cache_path 指令末尾显式关闭:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
proxy_cache_path /Users/john/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
- 不需要额外配置 proxy_temp_path;Nginx 会跳过临时目录,直接在 /Users/john/nginx_cache 写缓存文件
- 确保该目录已创建且 Nginx 进程有读写权限:
mkdir -p /Users/john/nginx_cache && chown nobody:nogroup /Users/john/nginx_cache - 重启 Nginx 后,观察响应头 X-Proxy-Cache 是否稳定出现 HIT
关闭后必须注意的两件事
use_temp_path=off 不是“一设了之”,它改变了数据落盘路径和压力分布:
- 缓存目录所在分区需预留足够空间——峰值流量下的全部缓存 + 正在写入的活跃响应体,都挤在同一个路径下,不能再靠 /var/tmp 分摊压力
- 某些特殊文件系统(如 NFS、APFS 加密卷、某些容器卷)可能不完全支持原子写入或 O_DIRECT,若实测出现写入卡顿或损坏,应回退 use_temp_path=on,并统一 temp_path 与 cache_path 的挂载点
怎么确认优化生效了
三步快速验证:
- 检查 error.log:不再出现 rename() "/var/tmp/..." to "/path/to/cache/..." failed (18)
- 运行
ls -l /var/tmp/ | grep nginx:没有持续增长的 .tmp 文件 - 发起多次相同请求,看响应头 X-Proxy-Cache 是否从 MISS/BYPASS 变为稳定的 HIT


















