部署Django至AWS Elastic Beanstalk遇502网关错误求助
解决Django部署AWS Elastic Beanstalk出现502网关错误的问题
核心问题定位
你的502错误大概率是Gunicorn无法找到Django的WSGI入口文件,根源在于代码仓库的多层结构(根目录下有node和python子文件夹)导致EB默认的Python路径配置无法定位到myproject模块。
关键配置修正
1. 调整.ebextensions/django.config配置
针对你的项目结构,修改配置文件如下,确保PYTHONPATH和WSGIPath设置准确:
option_settings: aws:elasticbeanstalk:application:environment: # 将python子文件夹加入Python模块搜索路径 PYTHONPATH: "/opt/python/current/app/python:$PYTHONPATH" DJANGO_SETTINGS_MODULE: myproject.settings aws:elasticbeanstalk:container:python: # 直接指定WSGI文件的相对路径(相对于代码部署根目录/opt/python/current/app) WSGIPath: python/myproject/wsgi.py
或者,在PYTHONPATH正确的前提下,也可以保持WSGIPath为模块格式:
WSGIPath: myproject.wsgi:application
两种方式都可行,直接指定文件路径的方式更不容易出错。
2. 确认依赖包配置
确保python/requirements.txt中包含gunicorn,EB会自动安装该文件内的依赖,缺少Gunicorn会导致无法启动WSGI服务:
gunicorn>=20.1.0 # 其他Django依赖...
排查验证步骤
1. 登录EB实例检查文件结构
通过SSH登录到EB的EC2实例,确认代码部署路径和myproject的位置:
# 替换为你的密钥和实例IP ssh -i your-key-pem-file.pem ec2-user@your-ec2-instance-ip # 进入EB代码部署根目录 cd /opt/python/current/app/ # 查看目录结构,确认python文件夹存在 ls -la # 进入python文件夹,确认myproject模块存在 cd python/ ls -la myproject/
需要看到wsgi.py和settings.py文件。
2. 查看Gunicorn错误日志
EB的Web服务日志存放于/var/log/目录,查看Gunicorn的错误输出:
cat /var/log/web.stderr.log
如果日志中出现ModuleNotFoundError: No module named 'myproject',说明PYTHONPATH配置未生效;如果是ImportError,则可能是Django依赖未安装或settings配置有误。
3. 手动启动Gunicorn测试
在实例中手动启动Gunicorn,验证路径是否正确:
cd /opt/python/current/app/python/ # 启动Gunicorn,指定WSGI模块 gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
如果能正常启动且无报错,说明路径配置正确,问题可能出在EB的配置加载环节;如果启动失败,根据错误提示调整依赖或路径。
内容的提问来源于stack exchange,提问作者lambooties
相关产品推荐
相关产品推荐

