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

AWS Elastic Beanstalk部署Django遇Nginx 413错误,配置易重置

解决AWS Elastic Beanstalk(Amazon Linux 2)Nginx 413 Entity Too Large配置被重置的问题

问题核心

部署在AWS Elastic Beanstalk(EC2 t2.micro,Amazon Linux 2)的Django后端,上传大于1MB的文件时触发Nginx 413错误,且手动或通过.ebextensions配置的client_max_body_size会在数小时后被重置,原因是自动缩放创建的新实例未继承自定义配置,或EB默认部署流程覆盖了配置。

有效解决方案(按优先级排序)

1. 通过EB环境属性直接配置(最简便可靠)

Amazon Linux 2的EB平台支持通过环境变量自动配置Nginx的客户端最大请求体大小,无需修改源码目录结构:

  • 登录AWS控制台,进入目标Elastic Beanstalk环境
  • 左侧菜单栏选择「配置」,点击「软件」配置项
  • 在「环境属性」区域添加新键值对:
    • 键:NGINX_CLIENT_MAX_BODY_SIZE
    • 值:100M(可根据需求调整大小)
  • 保存配置,EB会自动将该配置应用到所有现有实例,且自动缩放创建的新实例会继承此设置,不会被重置。

2. 使用.platform目录存放Nginx配置(符合Amazon Linux 2最佳实践)

Amazon Linux 2的EB推荐使用.platform目录管理Web服务器配置,该目录下的文件会被EB自动合并到Nginx默认配置中,不会被后续部署或自动缩放覆盖:

  • 在项目根目录创建如下结构:
    -- 项目根目录
      -- .platform
        -- nginx
          -- conf.d
            -- proxy.conf
    
  • proxy.conf内容:
    client_max_body_size 100M;
    
  • 将整个.platform目录包含在部署包中重新上传,EB会自动将配置复制到/etc/nginx/conf.d/目录,重启Nginx生效。

3. 修正.ebextensions配置(兼容旧方式)

若坚持使用.ebextensions,需确保配置在Nginx启动后执行,避免被EB默认流程覆盖:

  • 修改.ebextensions/02_files.config为:
    container_commands:
      01_copy_proxy_conf:
        command: "cp .ebextensions/nginx/conf.d/proxy.conf /etc/nginx/conf.d/proxy.conf && service nginx reload"
    
  • 确保.ebextensions/nginx/conf.d/proxy.conf存在且内容为client_max_body_size 100M;
  • 重新部署应用,container_commands会在应用代码部署完成后执行,复制配置并重启Nginx,确保配置生效。

注意事项

  • 已在Django中配置大文件处理函数的前提下,无需修改Django的FILE_UPLOAD_MAX_MEMORY_SIZE等参数(但可确保其值不小于Nginx设置的大小)。
  • 手动修改EC2实例上的Nginx配置仅对当前实例生效,自动缩放创建的新实例会使用默认配置,因此必须通过源码或EB环境配置的方式固化设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:05:29