使用awsebcli部署Django应用到AWS EB时出现502 Bad Gateway错误
问题排查与解决方案
1 AWS控制台看不到环境的修复
- 首先切换AWS控制台的区域到
us-west-2(俄勒冈区),区域选择入口在控制台顶部导航栏右侧,eb status输出的资源都部署在该区域,默认控制台可能选中其他区域导致看不到资源 - 确认控制台登录的AWS账号和
awsebcli使用的访问密钥所属账号完全一致,如果使用子账号密钥,需要确认该子账号拥有Elastic Beanstalk资源的查看权限
2 502 Bad Gateway与健康状态Red的排查
502错误本质是Elastic Beanstalk前置的Nginx反向代理无法正常转发请求到后端Django服务,按以下优先级排查:
2.1 校验WSGI路径配置
Amazon Linux 2的Python平台默认需要指定正确的WSGI入口路径:
- 执行
eb config查看配置项aws:elasticbeanstalk:container:python下的WSGIPath参数,需与你项目的wsgi.py路径一致,比如Django主应用名为django_project,则参数值应为django_project/wsgi.py - 确认
requirements.txt中已添加gunicorn依赖,平台默认使用gunicorn启动WSGI服务,缺失该依赖会导致后端服务无法启动
2.2 校验Django基础配置
- 检查
settings.py中的ALLOWED_HOSTS配置,必须添加eb status输出的CNAME域名django-test-env.eba-3i3hqgjc.us-west-2.elasticbeanstalk.com,也可临时设置为ALLOWED_HOSTS = ["*"]验证 - 若你设置了
DEBUG = False,需在settings.py中配置STATIC_ROOT = os.path.join(BASE_DIR, "static/"),并在项目根目录执行python manage.py collectstatic后重新部署,否则静态资源请求异常会导致服务健康检查失败
2.3 拉取日志定位具体错误
执行eb logs命令拉取环境全量日志,重点查看两类日志:
- Nginx错误日志
/var/log/nginx/error.log:可明确看到是后端连接被拒绝、超时还是其他转发错误 - 应用运行日志
/var/log/web.stdout.log、/opt/python/log/application.log:可查看Django启动过程中的报错,比如依赖版本冲突、数据库连接失败、配置参数错误等问题
2.4 校验Python版本兼容性
确认你的项目所有依赖包都兼容Python 3.8,requirements.txt中指定的Django版本需满足Python 3.8的适配要求,低于2.2版本的Django不支持Python 3.8,会直接启动失败
内容的提问来源于stack exchange,提问作者bordax
相关产品推荐
相关产品推荐

