单Django项目多应用绑定多域名的Apache部署配置咨询
单Django项目多应用绑定独立域名的Apache2部署方案
核心思路
无需为每个应用单独创建wsgi.py文件,利用Apache虚拟主机将所有域名请求导向同一个项目wsgi入口,再通过Django的域名路由分发机制,根据请求的Host头将流量转发到对应应用的URL配置。同时保持共用同一个virtualenv和分表的MySQL数据库。
Apache2虚拟主机配置
在Apache的sites-available目录下创建三个虚拟主机配置文件(或合并到一个文件),每个域名对应一个<VirtualHost>块,全部指向项目的wsgi.py文件,并共用同一个Python虚拟环境:
示例配置(app1.domain.com,其余域名配置逻辑一致)
<VirtualHost *:80> ServerName app1.domain.com # 替换为你的pyenv虚拟环境路径和项目根路径 WSGIDaemonProcess mydjango python-home=/home/your_user/.pyenv/versions/mydjango_env python-path=/var/www/mydjango WSGIProcessGroup mydjango # 指向项目根目录下的wsgi.py WSGIScriptAlias / /var/www/mydjango/mydjango/wsgi.py # 静态文件映射,替换为你的静态文件目录 Alias /static/ /var/www/mydjango/static/ <Directory /var/www/mydjango/static/> Require all granted </Directory> # wsgi.py文件权限配置 <Directory /var/www/mydjango/mydjango/> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
- 三个虚拟主机可共用同一个
WSGIDaemonProcess进程组,确保python-home指向同一个virtualenv路径即可。 - 替换配置中的所有路径为你的项目实际路径。
配置完成后启用站点并重启Apache:
sudo a2ensite app1.domain.com.conf sudo a2ensite app2.domain.com.conf sudo a2ensite app3.domain.com.conf sudo systemctl restart apache2
Django项目路由修改
修改项目根目录下的urls.py,根据请求域名动态加载对应应用的URL配置:
根urls.py示例代码
from django.contrib import admin from django.urls import include, path from django.http import HttpResponseNotFound def dispatch_by_domain(request): host = request.get_host() if host == 'app1.domain.com': from app1 import urls as app1_urls return include(app1_urls) elif host == 'app2.domain.com': from app2 import urls as app2_urls return include(app2_urls) elif host == 'app3.domain.com': from app3 import urls as app3_urls return include(app3_urls) else: return HttpResponseNotFound("Invalid domain") urlpatterns = [ path('', dispatch_by_domain), # 如需全局admin后台则保留,否则可移除 path('admin/', admin.site.urls), ]
数据库分表配置
每个应用的models.py中,通过db_table参数指定对应的数据表:
class App1Model(models.Model): # 字段定义 class Meta: db_table = 'app1_core_data'
验证步骤
- 确认所有域名的DNS解析已指向服务器IP。
- 访问每个域名,检查是否加载对应应用的页面。
- 测试数据写入操作,确认数据存储到对应分表中。
- 检查静态文件加载状态,若异常调整Apache的静态文件Alias配置。
内容的提问来源于stack exchange,提问作者Balaji Gandham
相关产品推荐
相关产品推荐

