You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Elastic Beanstalk的Django应用出现502 Bad Gateway问题求助

Django + Elastic Beanstalk 502 Bad Gateway问题排查与解决

一、获取完整错误日志

仅查看Django终端和基础Nginx日志不足以定位问题,需从以下渠道获取更全面的日志信息:

  • Elastic Beanstalk控制台下载完整日志:进入EB环境页面,切换至「日志」选项卡,选择「请求完整日志」,解压后可查看包含Django应用日志、WSGI服务日志、系统日志在内的全量日志文件。
  • SSH登录EC2实例实时查看日志:
    • 查看Django应用运行日志:tail -f /opt/python/log/application.log
    • 查看WSGI服务(如Gunicorn/uWSGI)日志:tail -f /var/log/uwsgi.log(uWSGI)或tail -f /opt/python/log/gunicorn.log(Gunicorn)
    • 查看Nginx详细错误日志:tail -f /var/log/nginx/error.log
    • 查看系统级日志(排查进程崩溃、内存不足等问题):tail -f /var/log/messages

二、常见问题排查与解决

针对Nginx日志中的upstream prematurely closed connection while reading response header from upstream错误,可从以下方向逐一排查:

1. 调整WSGI服务超时配置

若操作task_submitted模型时存在耗时操作(如大量数据库查询、数据处理),WSGI服务可能因超时提前断开连接:

  • Gunicorn配置:在.ebextensions/python.config中添加超时参数:
    container_commands:
      01_set_gunicorn_timeout:
        command: "echo '--timeout 120' >> /opt/python/bin/gunicorn_start"
    
  • uWSGI配置:在uWSGI配置文件中设置:
    harakiri = 120
    socket-timeout = 120
    

2. 修改Nginx超时参数

Nginx等待上游服务响应的时间过短也会触发该错误,通过.ebextensions/nginx.config添加自定义配置:

files:
  "/etc/nginx/conf.d/timeout_settings.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      proxy_connect_timeout 120s;
      proxy_send_timeout 120s;
      proxy_read_timeout 120s;
      fastcgi_send_timeout 120s;
      fastcgi_read_timeout 120s;

部署后Nginx会自动加载该配置。

3. 排查内存不足问题

EC2实例内存不足时,系统会触发OOM Killer杀掉WSGI worker进程,导致连接异常:

  • 确认是否存在OOM记录:grep -i oom /var/log/messages
  • 解决方式:升级EC2实例规格,或优化Django代码(如对task_submitted相关查询做分页、减少冗余数据库请求)。

4. 完善Django日志捕获配置

部分未捕获的代码异常可能未输出到终端,需调整settings.py中的日志配置,确保全量错误被记录:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'detailed_file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/opt/python/log/django_detailed.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['detailed_file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.db.backends': {
            'handlers': ['detailed_file'],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
}

部署后查看该日志文件定位代码异常。

5. 检查数据库连接问题

操作task_submitted时若出现数据库连接超时、连接池耗尽,也会导致进程断开:

  • 确认数据库实例的连接数限制,避免EB应用的连接数超过阈值;
  • 在settings.py中调整CONN_MAX_AGE参数,优化数据库连接复用策略。

内容的提问来源于stack exchange,提问作者Shittu Abdulrasheed Ayomide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:33:12