【问题标题】:Serving multiple domains with Django and Apache maps to one location only使用 Django 和 Apache 为多个域提供服务,仅映射到一个位置
【发布时间】:2021-11-08 13:27:42
【问题描述】:

我正在尝试将 Django 设置为服务多个站点(在下面的配置中,我使用示例 www.domain1.comwww.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 部分。
  • 谢谢你,成功了!如果您想将某些内容作为官方答案,很高兴标记并投​​票,干杯!
  • 没问题,很高兴它有效。我已经为你添加了答案。 @海登

标签: django dns apache2


【解决方案1】:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 2018-09-06
    • 2023-04-09
    • 2014-04-17
    • 1970-01-01
    • 2013-02-14
    • 2021-01-22
    • 2018-03-20
    相关资源
    最近更新 更多