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