Django搭配Apache配置多域名映射时所有域名指向同一站点如何解决
配置错误点及修正方案
核心错误:WSGI全局配置优先级高于虚拟主机配置
你当前把WSGIDaemonProcess、WSGIProcessGroup、WSGIScriptAlias这类WSGI相关配置放在了<VirtualHost>标签外部,属于全局生效配置。Apache加载配置时会先处理全局规则,全局定义的/路径WSGI别名会优先匹配所有请求,导致domain2的请求也被mysite1的WSGI规则处理,自然返回mysite1的站点内容。
具体修正步骤
- 将所有站点的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>
- 确认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()
- 重启Apache生效配置
执行命令:
systemctl restart apache2
内容的提问来源于stack exchange,提问作者Hayden Eastwood
相关产品推荐
相关产品推荐

