AWS Elastic Beanstalk 上如何增大 Nginx 的 client_max_body_size?

EB 环境改 Nginx 上传大小限制:Amazon Linux 2 用 .platform/nginx/conf.d/ 放置配置片段,旧版 AL1 用 .ebextensions 写 files 键;附完整示例与验证方法、FAQ。

最佳实践
AWS Elastic Beanstalk 上如何增大 Nginx 的 client_max_body_size?封面

在 EB 上不能直接改默认 nginx.conf——部署会被平台覆盖。正确姿势:Amazon Linux 2/2023 平台把配置片段放进源码包的 .platform/nginx/conf.d/ 目录;老的 Amazon Linux 1 平台用 .ebextensions 里的 files 键生成 conf 文件。

Amazon Linux 2/2023(现行平台)

源码包根目录建 .platform/nginx/conf.d/upload.conf

client_max_body_size 50M;

部署后 EB 会把该目录下的 .conf 文件 include 进 Nginx 的 http 块,eb deploy 即生效。

需要同时调整后端的限制(否则 Nginx 放行了、应用又拒):

  • Node/Express:app.use(express.json({ limit: '50mb' }))
  • PHP:php.iniupload_max_filesizepost_max_size 都要 ≥ 50M(同样可用 .platform 下的 php 配置覆盖)

Amazon Linux 1(旧平台,仍有不少存量)

.ebextensions/nginx.config

files:
  "/etc/nginx/conf.d/proxy.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      client_max_body_size 50M;

验证是否生效

# 登录 EB 实例
eb ssh

# 确认配置被 include
nginx -T | grep client_max_body_size

# 实测:构造一个 20MB 的文件上传
curl -X POST -F "file=@/path/to/big.bin" https://your-env.amazonaws.com/upload

413 Request Entity Too Large 消失即生效。

注意:client_max_body_size 的三个层级

这个指令可以出现在 httpserverlocation 任意层级,就近优先。EB 场景放 conf.d/*.conf 是 http 级;若应用里某个 location 又单独设了更小的值,以 location 的为准——排障时记得 nginx -T 看完整生效配置。

观测云对照

上传链路是典型的高失败率路径:413、499(客户端断开)、502 都集中在这里。把 EB 环境的 Nginx 访问日志通过 DataKit 采集到观测云,按状态码和 URI 聚合,"哪个接口的上传失败率高"一图即见;对 413 数量设告警阈值,限额配置回退或缺失时立刻能发现。

常见问题(FAQ)

Q:改了 .platform 部署后还是 413?
A:三处排查:eb sshnginx -T 确认值真的进去了;应用层(PHP/Node/Java)自身的 body 限制是否更小;前面是否还有 CloudFront/ALB 的额外限制。

Q:这个值设多大合适?
A:按需最小化。大文件上传(百 MB 级)建议改用 S3 预签名直传,绕开 Nginx 和应用服务器的双重内存/磁盘压力。

Q:单实例环境和负载均衡环境配置一样吗?
A:一样。.platform.ebextensions 对两种拓扑都生效;ALB 本身默认不限制 body 大小(只受 idle timeout 影响)。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台