client_max_body_size用于限制客户端请求体大小,默认1mb,超限返回413错误;作用域优先级为location>server>http;单位须小写(如20m),设0禁用检查但不推荐;代理场景需同步调整超时、关闭缓冲并配置后端限制。

直接在 Nginx 的 http、server 或 location 块中设置 client_max_body_size 指令,就能控制客户端能发多大的请求体。它默认是 1m(1MB),超了就返回 413 错误,不转发给后端。
按需设置作用域
优先级从高到低:location > server > http。推荐按路径精细控制,避免全局一刀切:
- 只对上传接口放宽:在
location /upload { ... }里写client_max_body_size 100m; - 整个站点统一:在
server块里设,比如client_max_body_size 50m; - 慎用 http 块全局设置——容易被遗漏的 location 继承默认 1m,反而出问题
单位和写法要规范
单位必须小写:k(KB)、m(MB)、g(GB)。写成 20M 会报错,20m 才合法。
- 支持数值如:
1024k、100m、2g - 设为
0表示禁用检查(不建议生产环境使用) - 最大理论值很高(64位系统可达约 8 EiB),但实际应结合业务和后端能力设定
代理场景不能只改这一项
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; - 后端服务也必须放宽限制,例如 Spring Boot 的
spring.servlet.multipart.max-request-size、PHP 的post_max_size等
改完要验证生效
配置重载后别跳过验证:
- 用
curl -X POST --data-binary @bigfile.zip模拟接近上限的请求 - 查 Nginx 错误日志:
tail -f /var/log/nginx/error.log,搜client intended to send too large body - 确认响应头
Server: nginx且后端无对应请求日志,说明确实是 Nginx 拦截











