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

为什么 use_temp_path 默认行为会引发跨分区问题
默认情况下,Nginx 先把响应内容写入临时路径(如 /var/tmp/nginx_temp),再原子性地 rename 到最终缓存目录。但 rename 系统调用要求源与目标必须在同一文件系统。若 /var/tmp 和你的 proxy_cache_path 分处不同磁盘或挂载点(比如 /var/tmp 在系统盘,/Users/xxx/nginx_cache 在另一块 SSD),rename 就会失败,导致缓存写入中断、502 错误或静默降级为不缓存。
确认是否触发了跨分区 rename 失败
这类问题通常表现为:
– 日志中反复出现 rename() "/var/tmp/nginx_temp/xxx" to "/path/to/cache/xxx" failed (18: Invalid cross-device link)
– 响应头中 X-Proxy-Cache 持续显示 BYPASS 或 MISS,即使配置无误
– ls -l /var/tmp/ 下堆积大量未清理的 .tmp 文件
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
正确设置 use_temp_path=off
只需在 proxy_cache_path 指令末尾显式关闭临时路径:
- 确保该行完整写在 http 块内,例如:
proxy_cache_path /Users/john/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; - 路径必须已存在且当前运行用户(如 john)有读写权限:
mkdir -p /Users/john/nginx_cache && chown john:staff /Users/john/nginx_cache - 无需额外配置 temp_path;Nginx 会直接将缓存文件写入目标目录,跳过中间拷贝
配合 use_temp_path=off 的必要调整
关闭临时路径后,需同步注意两点:
- 缓存目录所在分区必须有足够空间容纳峰值流量下的临时数据(因为不再分摊到 /var/tmp)
- 若使用 NFS 或 APFS 加密卷等特殊文件系统,需验证其对 O_DIRECT 或原子写入的支持程度;部分场景下仍建议保留 use_temp_path=on 并统一挂载点
- 重启 Nginx 后,用
curl -I http://localhost/api/test观察 X-Proxy-Cache 值是否稳定出现 HIT

















