Azure部署Django项目(Gunicorn)后出现502 Bad Gateway错误求助
排查Azure Web App部署Django+Gunicorn出现502 Bad Gateway的步骤
1. 核对Gunicorn启动命令与进程状态
- 确认启动命令完整指向Django的WSGI入口,正确格式应为
gunicorn --bind=0.0.0.0:$PORT myproject.wsgi:application,很多人会漏写最后的myproject.wsgi:application,这是高频错误点 - 登录Azure Web App的SSH终端,执行
ps aux | grep gunicorn,查看是否有Gunicorn进程在运行。如果没有,直接在终端手动运行启动命令,就能看到具体报错(比如依赖未正确安装、WSGI路径写错) - 检查
$PORT变量是否正常,在终端执行echo $PORT,确认返回的是Azure分配的端口(一般是8000以上的随机数)
2. 验证Django应用本身能否正常运行
- 在SSH终端运行
python manage.py check,排查Django配置错误(比如数据库连接失败、Key Vault变量未加载成功) - 尝试用Django自带的开发服务器启动:
python manage.py runserver 0.0.0.0:$PORT,如果这个也启动失败,说明问题出在Django应用本身,比如环境变量缺失、依赖版本不兼容 - 重新执行静态文件收集:
python manage.py collectstatic --noinput,查看是否有报错,虽然静态文件一般不影响Gunicorn启动,但如果收集时出现权限或文件缺失问题,也可能间接导致启动异常
3. 挖掘更详细的日志信息
- 除了部署日志,打开Azure Web App的日志流(Log Stream),实时查看启动过程的输出,Gunicorn的启动日志、Django的初始化日志都会在这里显示
- 查看
/home/LogFiles目录下的gunicorn.log或python.log文件,这些文件会记录更细节的错误,比如模块导入失败、数据库连接超时 - 开启详细错误日志:在配置里设置
WEBSITE_DEBUG_LOGGING=true,获取更底层的请求处理日志
4. 检查环境变量与权限问题
- 确认Key Vault的环境变量是否加载成功,在终端执行
printenv | grep <你的变量名>,查看变量值是否存在且正确。如果未加载,检查Key Vault的访问策略是否给Web App的托管标识足够权限 - 检查应用目录权限:
ls -l /home/site/wwwroot,确保Gunicorn能读取项目核心文件(比如settings.py、WSGI文件) - 核对Python环境:执行
which python和python --version,确认使用的是Oryx构建的虚拟环境中的Python版本,避免系统Python与依赖版本不匹配
5. 调整Gunicorn配置参数
- 增加日志级别,比如
gunicorn --bind=0.0.0.0:$PORT --log-level debug myproject.wsgi:application,输出更详细的启动过程,方便定位问题 - 限制工作进程数,比如
gunicorn --bind=0.0.0.0:$PORT --workers 2 myproject.wsgi:application,避免Azure资源不足导致进程启动失败 - 延长超时时间:
gunicorn --bind=0.0.0.0:$PORT --timeout 120 myproject.wsgi:application,如果Django启动时需要执行初始化操作(比如数据库迁移、缓存预热),可能需要更长时间
内容的提问来源于stack exchange,提问作者Ollie
相关产品推荐
相关产品推荐

