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

如何在Apache2服务器上配置多Django项目实现URL分访?

解决Apache2多Django项目路径映射问题

我来帮你梳理下正确的配置步骤,你当前的设置可能缺少了静态文件映射、进程隔离或者权限配置这些关键环节,一步步来调整:

1. 确认WSGI模块已启用

首先确保Apache的WSGI模块已经开启,这是运行Django的基础:

sudo a2enmod wsgi
sudo systemctl restart apache2

2. 完善虚拟主机配置(000-default.conf)

你的000-default.conf需要为每个项目配置独立的静态文件别名和WSGI入口映射,同时添加进程隔离避免项目冲突。替换成如下配置:

<VirtualHost *:80>
    ServerName localhost

    # OpenGMS 项目配置
    Alias /OpenGMS/static /var/www/OpenGMS/static
    <Directory /var/www/OpenGMS/static>
        Require all granted
    </Directory>

    WSGIScriptAlias /OpenGMS /var/www/OpenGMS/OpenGMS/wsgi.py process-group=OpenGMS
    <Directory /var/www/OpenGMS/OpenGMS>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    # 第二个项目 my_other_site 配置
    Alias /my_other_site/static /var/www/my_other_site/static
    <Directory /var/www/my_other_site/static>
        Require all granted
    </Directory>

    WSGIScriptAlias /my_other_site /var/www/my_other_site/my_other_site/wsgi.py process-group=my_other_site
    <Directory /var/www/my_other_site/my_other_site>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • Alias:映射静态文件路径,让Apache能直接返回静态资源,不用经过Django处理
  • process-group:为每个项目分配独立的进程组,避免两个项目的Python环境互相干扰
  • <Directory>块:确保Apache有权限访问项目的WSGI文件和静态文件

3. 调整WSGIPythonPath配置

在/etc/apache2/apache2.conf里,需要同时包含两个项目的根目录,这样Apache才能找到两个项目的Python模块:

WSGIPythonPath /var/www/OpenGMS:/var/www/my_other_site

如果每个项目用了独立的虚拟环境,建议在各自的wsgi.py里激活虚拟环境(见步骤5),而不是依赖全局的WSGIPythonPath。

4. 配置Django项目本身

每个项目的settings.py需要做两个关键设置:

  1. 允许localhost访问:
ALLOWED_HOSTS = ['localhost']
  1. 设置静态文件根目录,然后收集静态文件:
STATIC_ROOT = '/var/www/OpenGMS/static'

执行收集命令(每个项目都要跑):

cd /var/www/OpenGMS
python manage.py collectstatic

cd /var/www/my_other_site
python manage.py collectstatic

5. 处理虚拟环境(如果使用)

如果两个项目用了不同的虚拟环境,必须在各自的wsgi.py开头添加激活代码,比如OpenGMS的wsgi.py:

import os
import sys

# 激活虚拟环境
activate_this = '/path/to/opengms_venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

# 添加项目路径到Python搜索路径
sys.path.insert(0, '/var/www/OpenGMS')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'OpenGMS.settings')

# 后续原有代码...
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

另一个项目的wsgi.py同理,替换虚拟环境路径和项目名称。

6. 修复权限问题

确保Apache用户(通常是www-data)拥有项目目录的读写权限:

sudo chown -R www-data:www-data /var/www/OpenGMS /var/www/my_other_site
sudo chmod -R 755 /var/www/OpenGMS /var/www/my_other_site

7. 测试与排查

重启Apache生效:

sudo systemctl restart apache2

如果还是有问题,查看错误日志定位问题:

tail -f /var/log/apache2/error.log

常见问题包括:路径错误、权限不足、虚拟环境激活失败、WSGI模块未启用等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:28:13