Nginx 默认限制请求体大小,超限返回413错误;需配置client_max_body_size(支持k/m/g单位),并协同调整client_body_timeout、proxy_read/send_timeout及client_body_buffer_size等参数,同时确保后端服务也放宽对应限制。

默认情况下,Nginx 会对客户端上传的请求体(request body)大小做限制,超出会返回 413 Request Entity Too Large 错误。这在代理转发场景中尤其常见——比如前端通过 Nginx 代理向后端服务上传大文件、提交大 JSON 数据或调用含大量表单字段的接口时。
核心配置项:client_max_body_size
该指令控制 Nginx 允许接收的最大请求体大小,可在 http、server 或 location 块中设置。优先级从高到低为:location > server > http。
- 单位支持
k(KB)、m(MB)、g(GB),例如client_max_body_size 100m; - 设为
0表示禁用检查(不推荐,存在安全风险) - 若只在
http块设置,所有虚拟主机和路径都继承该值;建议按需在具体location中覆盖,更精准
注意代理场景下的“双重限制”
如果后端服务(如 Node.js、Spring Boot、Django)自身也有请求体大小限制,仅调大 Nginx 的 client_max_body_size 不够——Nginx 转发前已拦截,后端根本收不到请求。但即使 Nginx 放行了,后端仍可能因自身配置拒绝大 Body。
- 确认后端服务是否启用并调大对应参数(如 Spring Boot 的
spring.servlet.context-parameters.max-http-form-post-size或server.max-http-header-size) - 对于 FastAPI/Starlette,需设置
max_upload_size;Node.js Express 需配置body-parser或multer限制 - 建议 Nginx 的限制略大于后端限制,留出缓冲余量(如后端设 50MB,Nginx 设 64MB)
配合超时与缓冲区优化稳定性
大 Body 传输耗时更长,若不调整相关超时和缓冲参数,可能出现连接中断或 502/504 错误。
-
client_body_timeout:读取请求体的超时时间,默认 60s,大文件上传建议提高(如120s) -
proxy_read_timeout和proxy_send_timeout:控制与后端通信的读写超时,也应同步延长 -
client_body_buffer_size:内存中缓存请求体的大小,小于此值直接在内存处理;超过则写临时文件。增大可减少磁盘 I/O(如设为128k) -
client_max_body_size生效前,Nginx 已使用client_body_buffer_size缓存数据,二者需协调
验证与调试技巧
修改配置后务必重载 Nginx(nginx -s reload),并用实际请求测试:
- 用
curl -X POST -H "Content-Type: application/json" --data-binary @large.json http://your-domain/api/upload模拟大 Body 请求 - 检查 Nginx error log(通常
/var/log/nginx/error.log),搜索413或client intended to send too large body - 开启
error_log /path/to/log warn;可让日志输出更详细(注意生产环境避免 info/debug 级别) - 若用 HTTPS,还需确认 SSL 缓冲区未成为瓶颈(一般默认足够,极少需调
ssl_buffer_size)










