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

Apache部署Django项目访问/admin时服务器崩溃问题

Django Admin在Apache mod_wsgi Daemon模式下崩溃超时问题排查与解决

问题描述

本地Ubuntu服务器上部署Apache2,通过django-admin startproject site创建Django项目,配置虚拟主机使用WSGI Daemon进程运行。站点可通过IP192.168.1.3正常访问,但访问/admin模块时:

  • 能正常登录并加载初始后台页面
  • 点击后台内的链接或刷新页面,会触发长达5分钟的加载,最终返回500错误
  • 故障发生后,非/admin的首页也无法访问,需执行systemctl restart apache2重启Apache,或等待10-15分钟才能恢复服务
  • 恢复后再次访问/admin,故障会重复出现

Apache错误日志显示WSGI daemon超时、响应头异常。

环境信息

  • Django 4.1.5
  • mod-wsgi 4.9.4
  • Ubuntu服务器 + Apache2
  • 部署模式:Apache虚拟主机配置WSGI Daemon进程

已排查操作

  • 使用python manage.py runserver或python manage.py runmodwsgi直接运行项目时,192.168.1.3:8000上的/admin模块完全正常,无超时或崩溃问题
  • 删除并重建Django项目,重新配置Apache虚拟主机.conf文件,故障依旧
  • 已排除Django 3.0版本存在的历史/admin加载问题

解决方案建议

1. 调整WSGI Daemon进程配置

检查Apache虚拟主机中的WSGIDaemonProcess配置,优化进程超时与回收参数,避免进程卡死:

WSGIDaemonProcess site \
    processes=2 threads=15 \
    timeout=60 \
    max-requests=500 \
    request-timeout=30
WSGIProcessGroup site
  • timeout:设置Daemon进程的超时时间,避免等待超时的进程无法被及时回收
  • max-requests:设置进程处理指定请求数后自动重启,避免内存泄漏累积
  • request-timeout:单个请求的超时阈值,快速终止阻塞的请求

2. 验证静态文件配置

Admin模块的静态文件加载异常可能导致请求阻塞:

  1. 执行python manage.py collectstatic收集Admin静态文件到项目指定目录
  2. 在Apache虚拟主机配置中确保静态文件Alias与权限设置正确:
Alias /static/ /path/to/your/site/static/
<Directory /path/to/your/site/static/>
    Require all granted
</Directory>
  • 替换/path/to/your/site/static/为实际的静态文件目录路径

3. 排查数据库锁或连接问题

若使用SQLite作为数据库,Daemon多进程模式下可能触发文件锁阻塞:

  • 在Django项目的settings.py中调整SQLite连接参数,增加超时设置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
        'OPTIONS': {
            'timeout': 30,  # 设置数据库连接超时时间(秒)
        },
    }
}
  • 测试切换到MySQL/PostgreSQL等客户端-服务端型数据库,验证是否为SQLite锁导致的问题

4. 开启Django详细日志排查

通过Django日志捕获/admin请求时的具体异常:

  1. 在settings.py中添加日志配置:
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': False,
        },
    },
}
  1. 创建日志目录并设置权限:
sudo mkdir -p /var/log/django
sudo chown www-data:www-data /var/log/django
  1. 触发/admin故障后,查看/var/log/django/debug.log,定位具体的异常栈信息

5. 检查mod_wsgi与Python版本兼容性

确认mod_wsgi编译使用的Python版本与Django虚拟环境的Python版本完全一致:

  • 查看mod_wsgi编译的Python版本:
mod_wsgi-express module-config
  • 对比虚拟环境的Python版本:
source /path/to/your/venv/bin/activate
python --version

若版本不一致,需重新编译mod_wsgi匹配虚拟环境的Python版本,或调整Apache使用对应版本的mod_wsgi模块


内容的提问来源于stack exchange,提问作者Adam Isaacs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:41:06