use_temp_path=off可避免跨文件系统rename失败、提升缓存写入成功率和响应速度;需在proxy_cache_path中显式关闭,并确保缓存目录空间充足、权限正确且支持原子写入。

直接在 proxy_cache_path 中设 use_temp_path=off 就能跳过临时写入再移动的过程,避免跨文件系统 rename 失败,同时减少磁盘 I/O,提升缓存写入成功率和响应速度。
为什么默认 use_temp_path=on 容易出问题
默认开启时,Nginx 先把响应体写进临时目录(如 /var/tmp/nginx_temp),再用 rename() 移到最终缓存路径。但 rename() 要求源和目标必须在同一个挂载点 —— 如果你的 proxy_cache_path 在 /Users/xxx/cache(APFS 卷),而系统临时目录在另一块 SSD 或不同加密分区上,就会报错:
rename() "/var/tmp/nginx_temp/xxx" to "/path/to/cache/xxx" failed (18: Invalid cross-device link)- 缓存持续 MISS 或 BYPASS,X-Proxy-Cache 看不到 HIT
-
/var/tmp/下堆积大量未清理的.tmp文件
正确配置 use_temp_path=off
只需在 proxy_cache_path 指令末尾显式关闭,并确保目标目录可写、空间充足:
- 创建缓存目录并授权:
mkdir -p /opt/nginx/cache && chown nginx:nginx /opt/nginx/cache - 配置示例:
proxy_cache_path /opt/nginx/cache levels=1:2 keys_zone=my_cache:20m max_size=5g inactive=30m use_temp_path=off; - 不用额外配
proxy_temp_path,Nginx 会直接写入目标目录
关闭后要注意的两件事
use_temp_path=off 看似简单,但改变了数据落地路径,需同步检查:
- 缓存目录所在分区必须预留足够空间——峰值流量下的完整响应体将全部落在此处,不再分摊到系统临时目录
- 若缓存目录位于 NFS、APFS 加密卷或某些容器卷中,需验证是否支持原子写入;不支持时仍可能丢数据,此时建议统一挂载点并保留
use_temp_path=on
验证是否生效
重启 Nginx 后,用 curl 观察响应头:
curl -I http://localhost/api/data- 连续多次请求,
X-Proxy-Cache应稳定出现 HIT(而非始终 MISS/BYPASS) - 检查缓存目录:
find /opt/nginx/cache -name "*.tmp"应无输出


















