跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何配置 proxy_cache_path 的 use_temp_path 优化静态缓存文件移动的性能效率

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

相关文章