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

Apache部署两个Django虚拟环境无法同时运行问题

问题根因

单Apache进程加载的mod_wsgi仅能绑定一个Python解释器环境,WSGIPythonHome是全局生效配置,不支持在单实例下为不同虚拟主机单独指定,因此当前单Apache实例的配置方式无法同时运行两个分属不同虚拟环境的Django项目。另外Windows平台的mod_wsgi不支持Linux下常用的守护进程模式(WSGIDaemonProcess),无法在单Apache实例内实现Python环境隔离。
额外提一句:你现有配置里ServerName和ServerAlias字段不需要加http://前缀,直接填写IP或域名即可。

可行方案

方案1:统一依赖环境,单实例运行(仅适合无依赖冲突场景)

如果两个项目可以统一Django版本(比如都适配Django 3.2.11,或都适配Django 2.1.15),且其他第三方依赖版本不存在冲突,可以将所有依赖安装到同一个Python虚拟环境中:

  1. 仅保留一个WSGIPythonHome配置,指向这个统一的虚拟环境路径
  2. 删除两个项目wsgi_windows.py里的site.addsitedir配置,避免路径冲突
  3. 重启Apache即可同时运行两个项目。
    由于Django 2和Django 3无法在同一个Python环境中共存,如果你没法统一两个项目的Django版本,直接跳过这个方案。

方案2:部署两个独立Apache实例(生产环境首选,最稳定)

这是Windows平台下运行多套独立Python环境Web项目的标准方案,两个项目完全隔离,不存在依赖冲突,一个项目故障不会影响另一个:

  1. 复制现有Apache安装目录为第二份,例如原目录为C:/Apache24,复制为C:/Apache24_proj2
  2. 修改第一份Apache(跑项目1)的httpd.conf:
    • 仅保留Listen *:1111配置,删除Listen *:2222
    • 保留原有项目1的mod_wsgi加载、WSGIPythonHome、虚拟主机配置不变
  3. 修改第二份Apache(跑项目2)的httpd.conf:
    • 把监听端口改为Listen *:2222
    • 调整ServerRoot、日志存放路径、DocumentRoot等配置,指向第二份Apache自身的目录,避免和第一份Apache的运行文件、日志冲突
    • 配置mod_wsgi加载路径、WSGIPythonHome指向项目2的虚拟环境d:/django_project2/env2/,引入你之前写的项目2对应的虚拟主机配置
  4. 将两个Apache分别注册为Windows服务,实现开机自启:
    进入第一份Apache的bin目录执行:
    httpd.exe -k install -n "Apache_Project1"
    
    进入第二份Apache的bin目录执行:
    httpd.exe -k install -n "Apache_Project2"
    
  5. 分别启动两个服务,两个项目即可正常访问。

方案3:反向代理转发(适合不想多部署Apache实例的场景)

保留现有运行项目1的Apache实例不变,项目2用纯Python WSGI服务器启动,通过Apache反向代理转发请求:

  1. 在项目2的虚拟环境中安装waitress(轻量生产级WSGI服务器,适合Windows部署):
    pip install waitress
    
    执行启动命令让项目2监听本地回环地址的闲置端口(比如8000):
    waitress-serve --listen=127.0.0.1:8000 web_project.wsgi:application
    
    可以将该启动命令注册为Windows服务实现开机自启。
  2. 修改原有Apache配置,启用代理模块:
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    
  3. 将原2222端口的虚拟主机配置改为反向代理规则,静态文件仍交给Apache处理,动态请求转发给本地waitress服务:
    <VirtualHost *:2222>
        ServerName 10.198.170.91
        ProxyPass /static !
        ProxyPass / http://127.0.0.1:8000/
        ProxyPassReverse / http://127.0.0.1:8000/
    
        Alias /static D:/django_project2/web_project/apps/static
        <Directory D:/django_project2/web_project/apps/static>
            AllowOverride None
            Options None
            Require all granted
        </Directory>
    
        ErrorLog "logs/django_project2-error.log"
        CustomLog "logs/django_project2-access.log" common
    </VirtualHost>
    
  4. 重启Apache即可同时访问两个项目。
避坑提醒

不要尝试在单Apache实例下加载两个不同路径的mod_wsgi模块,会触发内存冲突直接导致Apache崩溃,无法启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:24