使用 Django 和 Apache 服务多个域只映射到一个位置

Serving multiple domains with Django and Apache maps to one location only

我正在尝试设置 Django 为多个站点提供服务(在下面的配置中,我使用示例 www.domain1.com and www.domain2.com)。我已经成功安装 Apache2,配置 wsgi.py 成功(或者看起来如此)。

我已经构建了我的 appache 配置文件来尝试以下映射:

www.example1.com 从 /var/www/mysite1 开始投放 www.example2.com 从 /var/www/mysite2

开始投放

example1.com 和 example2.com 的 DNS A 记录指向同一个 IP 地址。

我的设置存在的问题是 domain1.com 和 domain2.com 都映射到驻留在 /var/www/mysite1 的 Django,尽管事实上我已经(理论上)设置了他们映射到各自的位置。

我的 apache 配置文件如下,这两个文件(mysite1.conf 和 mysite2.conf)都使用 a2ensite 为它们创建了符号链接:

#/etc/apache2/sites-available/mysite1.conf

WSGIDaemonProcess mysite processes=2 threads=25 python-home=/var/www/mysite1/myenv1 python-path=/var/www/mysite1/myenv1/mys
ite1
WSGIProcessGroup mysite
WSGIScriptAlias / /var/www/mysite1/myenv1/mysite1/mysite1/wsgi.py
<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias xx.xx.xx.xx
    DocumentRoot /var/www/mysite1

    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>

#/etc/apache2/sites-available/mysite2.conf
WSGIDaemonProcess mysite2 processes=2 threads=25 python-home=/var/www/mysite2/myenv2 python-path=/var/www/mysite2/myenv
2/mysite2
WSGIProcessGroup mysite2
WSGIScriptAlias / /var/www/mysite2/myenv2/mysite2/mysite2/wsgi.py process-group=mysite2
WSGISocketPrefix /var/run/wsgi

<VirtualHost *:80>
    ServerName domain2.com

    ErrorLog ${APACHE_LOG_DIR}/mysite2-error.log
    CustomLog ${APACHE_LOG_DIR}/mysite2-access.log combined
    DocumentRoot /var/www/mysite2
    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>

示例 wsgi.py 文件如下所示,并且在加载时工作正常(即从正确的位置加载):

import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite1.settings'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite1.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

两个日志中均未报告错误(/var/syslog/apache2/mysiteX.conf,其中 x=1 或 2)

我做错了什么?我如何更正此问题以便 domain2 开始映射到 /var/www/mysite2?

非常感谢!

WSGI 标签需要位于其各自域名的 VirtualHost 块内。

例如

<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias xx.xx.xx.xx
    DocumentRoot /var/www/mysite1

    WSGIDaemonProcess mysite processes=2 threads=25 python-home=/var/www/mysite1/myenv1 python-path=/var/www/mysite1/myenv1/mys
    ite1
    WSGIProcessGroup mysite
    WSGIScriptAlias / /var/www/mysite1/myenv1/mysite1/mysite1/wsgi.py
    ...

</VirtualHost>