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

Windows Server下Apache 2.4 mod_wsgi多Django项目部署故障排查

多Django项目Apache mod_wsgi部署问题排查

问题描述

在Windows Server环境使用Apache 2.4 + mod_wsgi部署三个Django项目时,前两个项目(端口8001、8002)正常运行,第三个项目(端口8003的HealthCenter)触发500内部服务器错误。单独运行第三个项目无异常,同时部署时失败。

相关配置

httpd.conf 核心配置

ServerName 172.31.4.38
Listen 8001
Listen 8002
Listen 8003
LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python311/python311.dll"
LoadModule wsgi_module "C:/Users/Administrator/AppData/Local/Programs/Python/Python311/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp311-win_amd64.pyd"
WSGIPythonHome "C:/Users/Administrator/AppData/Local/Programs/Python/Python311"
WSGIPythonPath "D:/adhocvenv/Lib/site-packages"

虚拟主机配置

<VirtualHost *:8001>
    ServerName 172.31.4.38
    
    WSGIScriptAlias / "D:\adhocvenv\adhocpayroll\adhocpayroll\wsgi.py" application-group=site1

    <Directory "D:\adhocvenv\adhocpayroll">
            Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:8002>
    ServerName 172.31.4.38
    #DocumentRoot "D:/StoreManagementSystem"

    WSGIScriptAlias / "D:/StoreManagementSystem/StoreManagementSystem/wsgi.py" application-group=site2
    <Directory "D:/StoreManagementSystem">
        Require all granted
    </Directory>
</VirtualHost>


<VirtualHost *:8003>
    ServerName 172.31.4.38
    DocumentRoot "D:/HealthCenter"
        
    WSGIScriptAlias / "D:/HealthCenter/HealthCenter/wsgi.py" application-group=site3

    <Directory "D:/HealthCenter">
        Require all granted
    </Directory>
</VirtualHost>

错误日志关键信息

[Thu Nov 23 17:09:13.786184 2023] [wsgi:error] [pid 38164:tid 2216] [client 172.31.4.38:57355] ModuleNotFoundError: No module named 'StoreManagementSystem'

问题根源

  1. Python路径未隔离:全局配置的WSGIPythonPath仅包含D:/adhocvenv/Lib/site-packages,三个项目共享同一Python解释器进程。前两个项目启动后会修改Python路径添加自身根目录,第三个项目启动时,解释器残留了前一个项目的路径信息,导致Django误加载其他项目的配置模块。
  2. 项目根目录未显式加入Python路径:第三个项目的wsgi.py未主动将自身项目根目录添加到Python搜索路径,无法让Django正确定位自身配置文件。

解决方案

方案1:给每个虚拟主机单独配置Python路径

修改虚拟主机配置,为每个项目添加包含自身根目录和虚拟环境依赖的独立WSGIPythonPath:

<VirtualHost *:8001>
    ServerName 172.31.4.38
    WSGIPythonPath "D:/adhocvenv/adhocpayroll;D:/adhocvenv/Lib/site-packages"
    
    WSGIScriptAlias / "D:\adhocvenv\adhocpayroll\adhocpayroll\wsgi.py" application-group=site1

    <Directory "D:\adhocvenv\adhocpayroll">
            Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:8002>
    ServerName 172.31.4.38
    WSGIPythonPath "D:/StoreManagementSystem;D:/adhocvenv/Lib/site-packages"

    WSGIScriptAlias / "D:/StoreManagementSystem/StoreManagementSystem/wsgi.py" application-group=site2
    <Directory "D:/StoreManagementSystem">
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:8003>
    ServerName 172.31.4.38
    WSGIPythonPath "D:/HealthCenter;D:/adhocvenv/Lib/site-packages"
    DocumentRoot "D:/HealthCenter"
        
    WSGIScriptAlias / "D:/HealthCenter/HealthCenter/wsgi.py" application-group=site3

    <Directory "D:/HealthCenter">
        Require all granted
    </Directory>
</VirtualHost>

方案2:修改wsgi.py添加项目路径

在每个项目的wsgi.py开头添加代码,强制将项目根目录加入Python搜索路径:

import os
import sys

# 添加项目根目录到Python搜索路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

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

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

方案3:启用独立进程组(彻底隔离环境)

如果路径冲突问题仍存在,可为每个项目配置独立的守护进程组,彻底隔离Python运行环境:

<VirtualHost *:8003>
    ServerName 172.31.4.38
    WSGIDaemonProcess site3 python-home="C:/Users/Administrator/AppData/Local/Programs/Python/Python311" python-path="D:/HealthCenter;D:/adhocvenv/Lib/site-packages"
    WSGIProcessGroup site3
        
    WSGIScriptAlias / "D:/HealthCenter/HealthCenter/wsgi.py"

    <Directory "D:/HealthCenter">
        Require all granted
    </Directory>
</VirtualHost>

验证步骤

  1. 重启Apache服务
  2. 访问http://172.31.4.38:8003确认项目正常加载
  3. 检查Apache错误日志,确认无ModuleNotFoundError类报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:30:53