use_temp_path=off可避免跨文件系统rename失败导致的缓存写入中断,并减少一次磁盘I/O;需在proxy_cache_path中显式关闭,同时确保缓存目录空间充足、权限正确且位于支持原子写入的文件系统。
直接在
中设
就能避免缓存写入时跨分区 rename 失败,同时减少一次磁盘 I/O,提升静态资源缓存效率。
为什么 use_temp_path 默认会拖慢缓存性能
Nginx 默认开启
,意味着它先把响应内容写进临时目录(如
),再用
移到最终缓存路径。但
要求源和目标必须在同一个文件系统——如果临时目录和你的
分属不同挂载点(比如系统盘 vs 用户 SSD、APFS 加密卷 vs 普通卷),就会报错:
缓存写入中断,
持续显示
或
下堆积大量残留的
文件
正确配置 use_temp_path=off 的关键步骤
只需在定义缓存路径时显式关闭,并确保目标目录就绪:
创建缓存目录并赋权:
在
块中写入完整配置:
不需要额外配
;Nginx 会直接把缓存文件落盘到
关闭 use_temp_path 后必须注意的两点
跳过临时路径虽快,但也带来新约束:
缓存目录所在分区必须预留足够空间——峰值流量下的原始响应体将全部写入此处,不再分流到系统临时区
某些特殊文件系统(如 NFS、APFS 加密卷)可能不支持原子写入或
,若实测出现写入卡顿或损坏,可暂时恢复
,并统一挂载点(例如把
和缓存目录都建在同块 SSD 上)
验证是否生效的简单方法
重启 Nginx 后,发请求观察响应头和磁盘行为:
执行
,确认
出现
且稳定
检查
下是否有正常生成的子目录与缓存文件(如
),而非空目录或残留
翻看 error log,确认不再出现
类报错
proxy_cache_pathuse_temp_path=offuse_temp_path=on/var/tmp/nginx_temprename()rename()proxy_cache_pathrename() "/var/tmp/xxx" to "/Users/xxx/cache/xxx" failed (18: Invalid cross-device link)X-Proxy-CacheBYPASSMISS/var/tmp/.tmpmkdir -p /data/nginx/cache && chown nginx:nginx /data/nginx/cachehttpproxy_cache_path /data/nginx/cache levels=1:2 keys_zone=static:10m max_size=2g inactive=1d use_temp_path=off;proxy_temp_path/data/nginx/cacheO_DIRECTuse_temp_path=on/var/tmpcurl -I http://your-domain/static/logo.pngX-Proxy-CacheHIT/data/nginx/cache0/5f/xxxxxx.tmpInvalid cross-device link