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

AWS Elastic Beanstalk中Dotnet Core API大文件上传CORS问题求助

问题描述

我的应用由以下组件构成:

  • Vue.js 前端网站
  • .NET Core API

我需要在前端支持用户上传最多10个文件,总大小不超过50MB,文件最终存储到S3。为了让API能接收对应大小的请求,我做了以下配置:

  1. 在控制器方法上添加特性:
[RequestSizeLimit(55 * 1024 * 1024)]
public async Task<IActionResult> SubmitWorkshopNote() {...}
  1. 在Startup.cs中配置FormOptions:
services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 55 * 1024 * 1024;
});

本地测试一切正常,但部署到Elastic Beanstalk后,当文件总大小超过约28-29MB时(比如请求Content-Length约36MB),会出现CORS错误。当总大小不超过27MB时,无CORS问题,一切正常。

已尝试的解决步骤:

  • 为EB环境添加环境变量(设置ASPNETCORE_FORWARDEDHEADERS_ENABLED=true)
  • 发布前在配置文件中添加client_max_body_size 55M;

我的EB环境使用默认配置+应用负载均衡器,未使用AWS WAF,现在不知道还能检查或尝试哪些操作。


排查与解决建议

1. 调整应用负载均衡器(ALB)的请求大小限制

ALB默认允许的POST请求最大大小为29MB,超过这个阈值时ALB会直接拒绝请求,而浏览器会将这种无CORS头的错误响应解析为CORS问题,这正好匹配你遇到的阈值。

修改步骤:

  • 登录AWS控制台,进入目标负载均衡器页面
  • 切换到「监听器」标签,选择对应服务的监听器(如HTTPS 443)
  • 点击「查看/编辑规则」,添加一条规则,设置请求大小限制为55MB(或更大的余量值)

2. 验证Nginx配置是否生效

在Amazon Linux 2的EB环境中,Nginx作为反向代理,需确保配置文件路径正确:

  • 将包含client_max_body_size 55M;的配置文件放在项目根目录的.platform/nginx/conf.d/下(例如命名为upload.conf)
  • 部署后通过EB的SSH连接实例,执行nginx -T命令,确认当前生效的Nginx配置中已包含该参数

3. 完善ASP.NET Core转发头配置

仅开启环境变量可能不够,需明确配置转发头规则,确保应用正确识别来自ALB的请求:
在Startup.cs的ConfigureServices中添加:

services.AddForwardedHeaders(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 替换为你的ALB内网IP
    options.KnownProxies.Add(IPAddress.Parse("10.0.0.0/8"));
});

并在Configure方法中,确保app.UseForwardedHeaders();在app.UseCors();和app.UseAuthentication();之前调用

4. 查看实例日志定位问题

通过EB控制台下载完整日志包,重点检查:

  • Nginx错误日志(/var/log/nginx/error.log):查看是否有请求大小超限的拦截记录
  • ASP.NET Core应用日志:确认请求是否到达API层,还是在Nginx/ALB阶段被拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:06:21