client_body_temp_path用于指定nginx存储超出内存缓冲的客户端请求体临时文件的根目录及子目录层级,仅在请求体超过client_body_buffer_size时生效;需设为绝对路径、由worker用户拥有读写权限,并推荐配置两级子目录(如1 2)以提升i/o效率。

client_body_temp_path 是 Nginx 用于存放客户端请求体(如 POST、PUT 等大体积请求数据)临时文件的路径配置项,仅在请求体超出内存缓冲区(由 client_body_buffer_size 控制)时启用。
作用与触发条件
当上传文件或提交大型表单时,若请求体大小超过 client_body_buffer_size(默认 8k),Nginx 会把超出部分写入磁盘临时文件。此时 client_body_temp_path 指定的就是这些临时文件的根目录。
- 不设置该指令时,Nginx 使用编译时指定的默认路径(通常为
/var/tmp/nginx/client_body或类似位置) - 路径必须存在且 Nginx 工作进程(通常是
www-data或nginx用户)有读写权限 - 支持最多三级子目录层级(用于分散文件、避免单目录海量文件),例如:
client_body_temp_path /data/nginx/temp 1 2;
正确配置写法
在 http、server 或 location 块中设置,推荐放在 http 块全局生效:
http {
client_body_temp_path /var/lib/nginx/body 1 2;
client_body_buffer_size 16k;
client_max_body_size 100m;
}
其中 /var/lib/nginx/body 是主路径,1 2 表示创建两级哈希子目录(如 a/1/、f/3/),提升文件查找与 I/O 效率。
常见问题与建议
若上传失败、返回 400 或 500 错误,或日志中出现 open() "/var/lib/nginx/body/xxx" failed (13: Permission denied),大概率是路径权限或磁盘空间问题。
- 确保目录存在:
sudo mkdir -p /var/lib/nginx/body - 赋予权限:
sudo chown nginx:nginx /var/lib/nginx/body(用户组名依实际运行用户调整) - 避免挂载在 NFS 或低性能存储上;建议使用本地 SSD 或高速 SATA 盘
- 配合
client_max_body_size合理设定上限,防止临时文件无限制增长
与其他临时路径的区别
Nginx 有多个独立的临时路径指令,互不影响:
-
client_body_temp_path:仅处理请求体(request body) -
proxy_temp_path:代理响应体缓存(如 upstream 返回大响应) -
fastcgi_temp_path:FastCGI 协议传输的请求/响应临时文件 -
scgi_temp_path、uwsgi_temp_path:对应协议专用
各路径可指向不同磁盘分区,便于隔离 I/O 负载和容量管理。











