client_body_buffer_size不直接限制上传大小,仅控制请求体内存缓冲上限;真正限制需设client_max_body_size,后者超限返回413错误,二者须协同配置并配齐temp_path、timeout等参数。

在 Nginx 中,client_body_buffer_size 本身**不直接限制上传文件大小**,它只是控制请求体(request body)在内存中缓存的上限。真正限制上传大小需要配合 client_max_body_size 使用——后者才是你该关注的核心指令。
client_body_buffer_size 的作用和常见误解
这个指令指定 Nginx 缓存客户端请求体(比如表单数据、JSON 或文件内容)所用内存缓冲区的大小。默认通常是 8KB 或 16KB。
- 如果上传内容 ≤ 缓冲区大小,Nginx 全部存在内存里,处理快;
- 如果超过,Nginx 会把超出部分写入临时文件(路径由
client_body_temp_path指定); - 它**不会拒绝大上传**,也不会报错 413,只是影响内存/磁盘使用策略。
真正限制上传大小:必须设 client_max_body_size
要阻止用户上传超限文件(比如禁止上传大于 10MB 的文件),必须设置:
client_max_body_size 10M;
这个值可以放在 http、server 或 location 块中,越靠近具体 location 优先级越高。
- 设为
0表示不限制(不推荐生产环境); - 单位支持
k、M、G(如20M); - 超出时 Nginx 返回 HTTP 413 Request Entity Too Large 错误。
配合使用的相关配置项
单设 client_max_body_size 可能还不够,尤其对大文件上传:
-
client_body_temp_path /var/tmp/nginx/client_body 1 2;:指定临时文件存放路径及哈希子目录结构,确保磁盘有足够空间和权限; -
client_header_timeout和client_body_timeout:避免慢速上传导致连接长时间占用; - 若后端是 FastCGI、Proxy 或 gRPC,还需检查对应模块的 body 大小限制(如
fastcgi_max_temp_file_size、proxy_max_temp_file_size)。
验证与调试技巧
改完配置后记得重载:nginx -t && nginx -s reload。
- 用 curl 测试:
curl -X POST -F "file=@bigfile.zip" http://your.site/upload; - 查看 error.log,如果出现
client intended to send too large body,说明client_max_body_size生效; - 注意浏览器或客户端可能缓存旧响应,建议用隐身模式或加时间戳参数排除干扰。











