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