You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS+Nginx反向代理下使用busboy上传大文件出现413错误如何解决

大文件上传Nginx 413错误无上限解决方案

方法一:直接取消当前接口路径的上传大小限制

Nginx的client_max_body_size参数设置为0时,就会完全关闭请求体大小检查,没有任何硬限制,完全适配无上限大文件上传需求。你当前配置中该参数设为100M,是触发413错误的直接原因。

你可以直接修改location块的配置如下:

location /api {
    proxy_pass   http://host.docker.internal:5000;
    proxy_pass_header Accept;
    proxy_pass_header Server;
    keepalive_requests 1000;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Ssl on;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection "upgrade";
    proxy_connect_timeout       3600;
    proxy_send_timeout          3600;
    proxy_read_timeout          3600;
    send_timeout                3600;
    # 设为0代表无请求体大小限制
    client_max_body_size        0;
}

注意:你已经配置了proxy_buffering off,该配置是流式上传的必要前提,关闭后Nginx不会在本地缓存完整请求体,会直接将收到的字节流实时转发给上游NodeJS服务,不会额外占用磁盘空间,完美匹配busboy的流式处理逻辑。同时建议将超时参数从600秒调大到3600秒甚至更高,避免低带宽场景下上传大文件时超时中断。

方法二:分片上传(更稳定的无上限方案)

如果不想完全放开Nginx的请求体限制,或者需要支持断点续传、上传失败自动重试的能力,可以选择分片上传方案:

  • 前端将大文件切分为固定大小的分片(建议单分片大小5-20MB),按顺序/并发上传给后端接口
  • 后端接收所有分片后,按分片序号拼接为完整文件

该方案不需要修改Nginx的client_max_body_size默认限制,只要单分片大小小于设置的上限即可,不管多大的文件都可以正常上传,稳定性和容错性更高。

配套校验项

  • 确认NodeJS服务端的busboy没有设置limits.fileSize参数,避免服务端主动截断大文件
  • NodeJS对应路由不要启用express.json()、express.urlencoded()这类会缓冲全量请求体的中间件,直接用busboy处理流式请求即可
  • 如果Nginx和上游NodeJS服务部署在不同服务器,确认两地之间的内网带宽足够,避免成为传输瓶颈

内容的提问来源于stack exchange,提问作者Phantom007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:00:03