如何在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需要做两个关键设置:
- 允许localhost访问:
ALLOWED_HOSTS = ['localhost']
- 设置静态文件根目录,然后收集静态文件:
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
相关产品推荐
相关产品推荐

