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

Django搭配Apache配置多域名映射时所有域名指向同一站点如何解决

配置错误点及修正方案

核心错误:WSGI全局配置优先级高于虚拟主机配置

你当前把WSGIDaemonProcess、WSGIProcessGroup、WSGIScriptAlias这类WSGI相关配置放在了<VirtualHost>标签外部,属于全局生效配置。Apache加载配置时会先处理全局规则,全局定义的/路径WSGI别名会优先匹配所有请求,导致domain2的请求也被mysite1的WSGI规则处理,自然返回mysite1的站点内容。

具体修正步骤

  1. 将所有站点的WSGI配置挪到对应VirtualHost内部
    修改后的两个配置文件参考如下:

mysite1.conf修正后内容

#/etc/apache2/sites-available/mysite1.conf
<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias xx.xx.xx.xx
    DocumentRoot /var/www/mysite1

    # 把原来放在外面的WSGI配置挪到此处
    WSGIDaemonProcess mysite processes=2 threads=25 python-home=/var/www/mysite1/myenv1 python-path=/var/www/mysite1/myenv1/mysite1
    WSGIProcessGroup mysite
    WSGIScriptAlias / /var/www/mysite1/myenv1/mysite1/mysite1/wsgi.py process-group=mysite

    ErrorLog ${APACHE_LOG_DIR}/mysite1-error.log
    CustomLog ${APACHE_LOG_DIR}/mysite1-access.log combined

    Alias /robots.txt /var/www/mysite1/myenv1/mysite1/static/robots.txt
    Alias /favicon.ico /var/www/mysite1/myenv1/mysite1/static/favicon.ico
    Alias /static/ /var/www/mysite1/myenv1/mysite1/static/

    <Directory /var/www/mysite1/myenv1/mysite1/mysite1>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    <Directory /var/www/mysite1/myenv1/mysite1/static>
        Require all granted
    </Directory>
</VirtualHost>

mysite2.conf修正后内容

#/etc/apache2/sites-available/mysite2.conf
<VirtualHost *:80>
    ServerName domain2.com
    DocumentRoot /var/www/mysite2

    # 把原来放在外面的WSGI配置挪到此处
    WSGIDaemonProcess mysite2 processes=2 threads=25 python-home=/var/www/mysite2/myenv2 python-path=/var/www/mysite2/myenv2/mysite2
    WSGIProcessGroup mysite2
    WSGIScriptAlias / /var/www/mysite2/myenv2/mysite2/mysite2/wsgi.py process-group=mysite2
    WSGISocketPrefix /var/run/wsgi

    ErrorLog ${APACHE_LOG_DIR}/mysite2-error.log
    CustomLog ${APACHE_LOG_DIR}/mysite2-access.log combined

    Alias /robots.txt /var/www/mysite2/myenv2/mysite2/static/robots.txt
    Alias /favicon.ico /var/www/mysite2/myenv2/mysite2/static/favicon.ico
    Alias /static/ /var/www/mysite2/myenv2/mysite2/static/

    <Directory /var/www/mysite2/myenv2/mysite2/mysite2>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    <Directory /var/www/mysite2/myenv2/mysite2/static>
        Require all granted
    </Directory>
</VirtualHost>
  1. 确认mysite2的wsgi.py配置正确
    检查/var/www/mysite2/myenv2/mysite2/mysite2/wsgi.py,确保里面的配置指向mysite2的设置,不要和mysite1的配置混用:
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
# 此处要改为mysite2.settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite2.settings'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
  1. 重启Apache生效配置
    执行命令:
systemctl restart apache2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:54:03