最有效方式是设置use_temp_path=off,让nginx跳过临时目录写入与跨设备rename流程,避免双倍i/o和静默失败;需在proxy_cache_path中显式配置,并确保缓存目录空间充足、权限正确且文件系统支持原子写入。

直接让缓存文件和临时文件落在同一块磁盘上,核心不是“配置 proxy_temp_path”,而是关闭中转流程——即在 proxy_cache_path 中启用 use_temp_path=off。这样 Nginx 就不会先写临时目录再移动,所有缓存内容直接落盘到你指定的缓存根目录下。
为什么不用单独配 proxy_temp_path
默认开启 use_temp_path=on 时,Nginx 会把缓存内容先写进 proxy_temp_path(比如 /var/tmp/nginx_temp),再用 rename() 移到 proxy_cache_path 目录。但这个操作要求源和目标必须在同一挂载点;跨分区、跨加密卷、跨 NFS 都会失败,导致缓存静默失效(X-Proxy-Cache: BYPASS)或残留 .tmp 文件。
所以,与其费力调优 proxy_temp_path,不如一步跳过它。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
正确配置:use_temp_path=off + 统一目录
在 http 块中定义缓存路径时,显式加上 use_temp_path=off:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:20m max_size=5g inactive=30m use_temp_path=off;-
确保
/data/nginx/cache已创建且权限正确:mkdir -p /data/nginx/cache && chown nginx:nginx /data/nginx/cache - 无需再写
proxy_temp_path指令,Nginx 会忽略它(只要use_temp_path=off生效)
必须同步检查的几件事
关闭中转后,所有响应体(包括大文件)都直写缓存目录,因此要确认:
- 缓存所在分区预留空间 ≥
1.5 × max_size(例如max_size=5g,建议至少留 8GB 可用空间) - 文件系统支持原子写入:ext4、XFS、非加密 APFS 可靠;NFS、overlayfs、APFS 加密卷可能不兼容
- 若实测出现卡顿或缓存写入失败,可临时恢复
use_temp_path=on,并把proxy_temp_path和proxy_cache_path设为同一挂载点下的不同子目录
怎么验证已生效
重启 Nginx 后做两件事:
- 用
curl -I多次请求同一资源,观察响应头中X-Proxy-Cache是否稳定返回HIT - 检查
/data/nginx/cache下是否生成了符合levels=1:2规则的子目录(如a/1f/...)和真实缓存文件,而不是空目录或.tmp文件 - 翻看
error.log,确认没有Invalid cross-device link类报错










