调大 client_max_body_size 需结合 Nginx 拦截判断、路径级精准配置、配套超时与缓冲调优及单位规范;仅修改此项易致上传失败或服务卡顿。

调大 client_max_body_size 不是单纯“放开限制”那么简单,它必须和请求体处理方式、后端能力、安全边界一起考虑。只改这一项,大概率上传失败或服务卡顿。
先确认是不是 Nginx 拦的 413
别急着改配置。Spring Boot 的 spring.servlet.multipart.max-request-size 已设到 100MB,但上传仍报 413,说明问题在 Nginx 层:
- 检查后端 access log:如果这次请求完全没记录,基本就是 Nginx 拦截了
- 看 Nginx error.log:出现
client intended to send too large body就坐实了 - 看响应头:Server: nginx + 标准 Nginx 错误页,不是后端返回的 HTML,也是强信号
按路径精准设置,别全局放大
client_max_body_size 作用域优先级是 location > server > http,推荐按业务路径收窄控制:
- 只对上传接口放宽:比如
location /api/upload { client_max_body_size 50m; } - 整个站点统一需求:写在
server块里,和server_name同级即可 - 避免写进
http块:容易被遗漏的 location 继承默认 1m,反而出问题 - 别写错位置:不能放在
events或http外,也不能重复定义(nginx -t会报 duplicate)
配套调优不能少,否则照样失败
Nginx 是代理层,只改 client_max_body_size 不够,后端收不到完整数据或超时中断很常见:
- 延长读取超时:
client_body_timeout 120s; - 关闭代理缓冲(关键):
proxy_buffering off;和proxy_request_buffering off;(Nginx ≥1.13.10) - 同步调后端超时:
proxy_read_timeout 180s;、proxy_send_timeout 180s; - 临时文件空间要够:
proxy_max_temp_file_size 2g;(尤其大文件上传场景)
缓冲策略要匹配业务类型
大请求体不等于全塞内存,合理用磁盘落盘才能稳住内存压力:
-
client_body_buffer_size设为 32k~128k:小 API 用 32k,含 Base64 的表单可设 64k - 超过缓冲区自动落盘:默认行为,依赖
client_body_temp_path路径可用且有空间 - 禁用
client_body_in_file_only on:生产环境不要强制全落盘,仅调试用 - 单位必须小写:写
50m,别写50M,否则nginx -t报错



















