413错误需修改Nginx配置而非前后端代码,关键是在location或server块中精准设置client_max_body_size,并同步调整client_body_timeout、proxy_read/send_timeout、client_body_buffer_size等参数,且后端限制须小于Nginx值。

413 错误是 Nginx 在请求刚进入时就拦截了超限的请求体,根本没传到后端——所以调前端或改后端代码都无效,必须动 Nginx 配置。关键不是“设多大”,而是“设在哪、设多少、配哪些参数一起调”。
精准配置 client_max_body_size 的位置
该指令支持 http / server / location 三级作用域,实际生效的是最匹配、最内层的设置。常见误区是只在 http 块加一行,结果被某个 server 或 location 块里的默认值(通常是 1m)覆盖。
- ✅ 推荐写在具体上传路径的 location 块里,例如:
location /api/upload { client_max_body_size 200m; proxy_pass http://backend; } - ⚠️ 若整个站点都需要大上传,可放在 server 块中,但要确认不会误放开管理接口等敏感路径
- ❌ 尽量不写在 http 块做全局放宽,尤其在多租户或多站点环境中,安全风险明显
设定合理数值而非盲目放大
单位支持 k / m / g,例如 50m、1g;设为 0 表示不限制,但生产环境不建议——既浪费资源,也削弱防护能力。
- 普通图片/文档上传:20m~50m 足够
- 视频或工程包上传:200m~1g 更稳妥
- 分段上传场景下,单次请求体可能含元数据+首片内容,建议按最大单片大小再上浮 20% 设定(如单片 10MB,设为 12m)
- 注意磁盘临时路径(
client_body_temp_path)是否有足够空间,且 Nginx 用户有读写权限,否则会转为 500 错误
同步调整配套超时与缓冲参数
只改 client_max_body_size 不够。大请求体传输耗时长、数据量大,Nginx 内部处理链路上还有几个关键参数需协同优化:
-
client_body_timeout:读取请求体超时,默认 60s;建议设为 120~300s,避免网络抖动中断 -
proxy_read_timeout和proxy_send_timeout:建议统一设为 600(10 分钟),防止转发过程中因后端处理慢而断连 -
client_body_buffer_size:控制内存缓存上限,建议设为 512k~1m;太小频繁刷盘拖慢速度,太大占用过多内存
确保后端限制 ≥ Nginx 设置值
Nginx 放行后,后端服务仍有自己的一套上传阈值。若后端限制更小,仍会返回 413(响应头显示 Server: gunicorn 或 X-Powered-By: Spring 等)。
- PHP:同时调大
upload_max_filesize和post_max_size(后者 ≥ 前者) - Spring Boot:两个参数缺一不可:
spring.servlet.multipart.max-file-size=50MB和spring.servlet.multipart.max-request-size=50MB(单位必须是 MB) - Express + multer:初始化时明确
limits: { fileSize: 50 * 1024 * 1024 } - 建议 Nginx 值略大于后端值(如后端设 50MB,Nginx 设 64MB),留出协议开销余量


















