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

Apache+mod_wsgi部署Django REST Framework时wsgi.py执行失败

Django+mod_wsgi部署问题排查

问题背景

通过Apache搭配mod_wsgi部署Django REST Framework,已完成mod_wsgi与Apache配置、settings.py静态文件设置及虚拟主机创建,但访问出现异常:

  • 执行curl 127.0.0.1:8001/django返回500内部服务器错误
  • 执行curl 127.0.0.1:8001提示客户端权限拒绝
    使用虚拟环境且已安装所有依赖包,推测问题出在wsgi.py执行环节,但无法定位具体原因。

虚拟主机配置

<VirtualHost 127.0.0.1:8001 _default_:8001>
  ServerAlias *
  DocumentRoot /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject
  
  ServerAdmin yaz@gmail.com
    
   
    # Set the path to your Django projec
    WSGIDaemonProcess myproject python-path=/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject:/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject:/opt/bitnami/projects/chatbotQZ/sources/env/lib/python3.7/site-packages
    WSGIProcessGroup myproject
    WSGIScriptAlias /django /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject/wsgi.py

    # Configure access to static files
    Alias /static/ /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/static
    <Directory /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/static>
        Require all granted
    </Directory>


    <Directory /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject>
        <Files wsgi.py>
           Require all granted
        </Files>
        <Files "favicon.ico">
           Require all granted
        </Files>
  
    </Directory>

    ErrorLog /opt/bitnami/projects/chatbotQZ/sources/logs/drfapp_error.log
    CustomLog /opt/bitnami/projects/chatbotQZ/sources/logs/drfapp_access.log combined
</VirtualHost>

wsgi.py内容

"""
WSGI config for myproject project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = get_wsgi_application()

settings.py关键内容

"""
Django settings for myproject project.

Generated by 'django-admin startproject' using Django 3.2.18.
"""
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = 'django-insecure-=z(3%l&3lrwvz16411c!-kjqaeb#@644o4$cd&go!w0ymi6(30'
DEBUG = True
ALLOWED_HOSTS = ['chatbotwQz.localhost']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'base',
]
AUTH_USER_MODEL = 'base.user_auth'

WSGI_APPLICATION = 'myproject.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'chatbot',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

错误日志

[Thu Jul 06 11:42:31.220822 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000] mod_wsgi (pid=4299): Failed to exec Python script file '/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject/wsgi.py'.
[Thu Jul 06 11:42:31.220857 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000] mod_wsgi (pid=4299): Exception occurred processing WSGI script '/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject/wsgi.py'.
[Thu Jul 06 11:42:31.220879 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000] Traceback (most recent call last):
[Thu Jul 06 11:42:31.220894 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]   File "/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject/wsgi.py", line 12, in <module>
[Thu Jul 06 11:42:31.220936 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]     from django.core.wsgi import get_wsgi_application
[Thu Jul 06 11:42:31.220946 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]   File "/opt/bitnami/projects/chatbotQZ/sources/env/lib/python3.7/site-packages/django/__init__.py", line 1, in <module>
[Thu Jul 06 11:42:31.220977 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]     from django.utils.version import get_version
[Thu Jul 06 11:42:31.220986 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]   File "/opt/bitnami/projects/chatbotQZ/sources/env/lib/python3.7/site-packages/django/utils/version.py", line 7, in <module>
[Thu Jul 06 11:42:31.221024 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]     from django.utils.regex_helper import _lazy_re_compile
[Thu Jul 06 11:42:31.221033 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]   File "/opt/bitnami/projects/chatbotQZ/sources/env/lib/python3.7/site-packages/django/utils/regex_helper.py", line 10, in <module>
[Thu Jul 06 11:42:31.221092 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]     from django.utils.functional import SimpleLazyObject
[Thu Jul 06 11:42:31.221101 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]   File "/opt/bitnami/projects/chatbotQZ/sources/env/lib/python3.7/site-packages/django/utils/functional.py", line 362, in <module>
[Thu Jul 06 11:42:31.221165 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]     class SimpleLazyObject(LazyObject):
[Thu Jul 06 11:42:31.221178 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000] TypeError: Error when calling the metaclass bases
[Thu Jul 06 11:42:31.221183 2023] [wsgi:error] [pid 4299] [remote 127.0.0.1:35000]     'property' object is not callable

curl访问结果

  • 执行curl 127.0.0.1:8001/django返回:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at
 yaz@gmail.com to inform them of the time this error occurred,
 and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>
  • 执行curl 127.0.0.1:8001返回客户端权限拒绝。

解决方案

1. 修复mod_wsgi与Python版本不兼容问题

错误日志中'property' object is not callable是典型的mod_wsgi编译版本与虚拟环境Python版本不匹配导致的。Bitnami环境自带的mod_wsgi可能基于系统Python编译,和虚拟环境的Python3.7不兼容。

解决步骤:

  • 卸载系统自带的mod_wsgi
  • 激活虚拟环境并安装适配版本的mod_wsgi:
source /opt/bitnami/projects/chatbotQZ/sources/env/bin/activate
pip install mod_wsgi
  • 运行mod_wsgi-express module-config获取模块配置代码,将其添加到Apache主配置文件中
  • 重启Apache服务

2. 修正虚拟主机路径配置

WSGIDaemonProcess的python-path重复添加了内层项目目录,改为添加项目根目录(包含myproject和base的上级目录):

WSGIDaemonProcess myproject python-path=/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject:/opt/bitnami/projects/chatbotQZ/sources/env/lib/python3.7/site-packages

3. 处理根路径权限问题

访问127.0.0.1:8001提示权限拒绝,可通过两种方式解决:

  • 给DocumentRoot目录添加全局访问权限:
<Directory /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject>
    Require all granted
</Directory>
  • 或者将WSGIScriptAlias映射到根路径,让根访问直接指向Django应用:
WSGIScriptAlias / /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject/wsgi.py

4. 更新ALLOWED_HOSTS

当前配置仅允许chatbotwQz.localhost访问,添加127.0.0.1:

ALLOWED_HOSTS = ['chatbotwQz.localhost', '127.0.0.1']

5. 验证静态文件收集

确保已执行静态文件收集命令,将应用静态文件统一归集到STATIC_ROOT目录:

source /opt/bitnami/projects/chatbotQZ/sources/env/bin/activate
python manage.py collectstatic

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:27:03