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
相关产品推荐
相关产品推荐

