部署在AWS Elastic Beanstalk的Node.js应用无法上传大文件如何解决
解决方案
1. 优先使用Amazon Linux 2平台推荐的.platform配置方式
你之前配置不生效的核心原因是:目前AWS Elastic Beanstalk的Amazon Linux 2版本Node.js平台,官方已推荐使用.platform文件夹自定义Nginx配置,旧的.ebextensions修改Nginx配置的方式容易被默认规则覆盖。
操作步骤:
- 在项目根目录创建
.platform/nginx/conf.d/层级文件夹 - 在该目录下新建
client_max_body_size.conf文件,内容如下:
client_max_body_size 512M;
- 打包项目时保证
.platform文件夹在zip包的根目录,不要嵌套在子文件夹中
2. 检查Node.js应用层的请求大小限制
Nginx配置生效后如果仍报错,就是Node.js服务本身限制了请求体大小,以常用的Express框架为例:
- 找到body解析中间件的配置位置,修改
limit参数,示例:
// 解析JSON请求体 app.use(express.json({ limit: '512M' })); // 解析表单请求体,包含文件上传场景也需要同步修改 app.use(express.urlencoded({ extended: true, limit: '512M' })); // 如果你使用了multer等专用文件上传中间件,也要同步检查修改对应大小限制配置
3. 检查负载均衡配置(如有使用应用负载均衡ALB)
如果你的环境配置了ALB,默认请求体最大大小为8MB,需要自行调整:
- 进入AWS Elastic Beanstalk控制台,打开对应环境详情页
- 点击「配置」->「负载均衡」
- 找到「应用负载均衡」分类下的「请求大小限制」选项,修改为512MB(或你需要的目标大小)
- 保存配置后等待环境更新完成
4. 部署后验证配置是否生效
部署完成后可以直接登录EB关联的EC2实例,验证配置是否正确加载:
- 执行命令
nginx -T | grep client_max_body_size,确认输出中有你设置的512M规则 - 如果规则已存在但未生效,执行
nginx -s reload手动重载Nginx配置
补充说明(针对旧版Amazon Linux AMI环境)
如果你使用的是已废弃的旧版Amazon Linux AMI(非Amazon Linux 2),使用.ebextensions配置时需要严格保证YAML格式缩进正确,.ebextensions文件夹必须放在zip包根目录,配置文件后缀必须为.config。
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

