App Engine Flex部署Django应用访问/admin登录返回502错误
问题根因
从错误日志和配置来看,502错误由两个核心问题触发:
- Gunicorn默认30秒超时阈值不足,Django admin登录请求需要连接Cloud SQL,网络延迟或数据库响应慢直接触发worker进程被强制杀死,nginx返回502错误
- 实例资源配置过低,0.5GB内存不足以支撑Django运行+数据库连接开销,也会导致worker进程异常退出
另外日志中静态文件404是未配置GAE静态路由导致,不会直接触发502,但也需要同步修复。
修复方案
1. 修改app.yaml配置
调整Gunicorn超时参数、上调实例资源、添加静态文件路由:
# 添加静态文件路由,放在runtime配置之前 handlers: - url: /static static_dir: static/ # [START runtime] runtime: python env: flex # 给Gunicorn添加--timeout参数,延长超时到120秒 entrypoint: gunicorn -b :$PORT --timeout 120 [myproject.wsgi] beta_settings: cloud_sql_instances: [instance]:asia-east2:[project] automatic_scaling: min_num_instances: 1 max_num_instances: 1 max_concurrent_requests: 80 resources: cpu: 1 # 内存上调到1GB memory_gb: 1 disk_size_gb: 10 runtime_config: python_version: 3 # [END runtime]
2. 修复静态文件404问题
部署前先执行Django静态文件收集命令,把admin自带的静态资源汇总到项目static目录:python manage.py collectstatic
3. 核对数据库配置
确认Django的settings.py中数据库HOST参数填写的是Cloud SQL的unix socket路径,格式如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 按实际使用的数据库类型修改 'NAME': '你的数据库名称', 'USER': '数据库账号', 'PASSWORD': '数据库密码', 'HOST': '/cloudsql/[instance]:asia-east2:[project]', 'PORT': '3306', } }
4. 核对服务账号权限
确认App Engine默认服务账号(格式为<你的项目ID>@appspot.gserviceaccount.com)已被授予Cloud SQL Client角色权限,避免数据库连接被拒绝。
修改完成后重新部署应用即可解决admin登录502问题。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

