使用 apache mod_wsgi 的 Django 多个站点:请求到错误的站点
Posted
技术标签:
【中文标题】使用 apache mod_wsgi 的 Django 多个站点:请求到错误的站点【英文标题】:Django multiple sites with apache mod_wsgi: Request going to wrong site 【发布时间】:2014-07-25 15:02:33 【问题描述】:我正在尝试使用带有mod_wsgi
的虚拟主机从一台 apache 服务器运行 2 个 Django 站点。问题是即使我使用另一个站点的主机名,我的所有请求都将发送到同一个 Django 站点(可能是 Apache 加载的第一个站点)。我的网站是
https://staging-test.mydomain.com
和
https://staging.mydomain.com
这是我的虚拟主机文件的内容。我已经创建了两个部署文件,我将它们放在我的 Apache 安装 (Ubuntu) 的 site-enabled
目录中。两个文件,因为它有助于开发操作。无论如何,配置看起来像
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName https://staging-test.mydomain.com
SetEnv PYTHON_EGG_CACHE /tmp
WSGIDaemonProcess https://staging-test.mydomain.com user=www-data group=www-data processes=10 threads=1 python-path=/home/talha/site1 display-name=wsgid
WSGIProcessGroup https://staging-test.mydomain.com
WSGIScriptAlias / /home/talha/site1/wsgi.py process-group=https://staging-test.mydomain.com application-group=%RESOURCE
WSGIPassAuthorization On
WSGIApplicationGroup %RESOURCE
</VirtualHost>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName https://staging.mydomain.com
SetEnv PYTHON_EGG_CACHE /tmp
WSGIDaemonProcess https://staging.mydomain.com user=www-data group=www-data processes=10 threads=1 python-path=/home/talha/site2 display-name=wsgid
WSGIProcessGroup https://staging.mydomain.com
WSGIScriptAlias / /home/talha/site2/wsgi.py process-group=https://staging.mydomain.com application-group=%RESOURCE
WSGIPassAuthorization On
WSGIApplicationGroup %RESOURCE
</VirtualHost>
我尝试使用WSGIDaemonProcess
和WSGIProcessGroup
使站点在不同的进程中运行,但是请求仍然只发送到其中一个。
你有什么想法吗?
【问题讨论】:
从ServerName
中删除https://
【参考方案1】:
正如有人指出的那样,您最初的问题是您不应该在 ServerName 中使用 URI,它必须只是主机名。除了解决这个问题,请确保您阅读:
http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.html由于 ServerName 设置错误,您遇到了该帖子中描述的默认 VirtualHost 问题的变体。
【讨论】:
我从ServerName
中删除了https
,现在它们是staging.mydomain.com
和staging-test.mydomain.com
。系统的主机名是staging.mydomain.com
。我仍然面临同样的问题。您能解释一下您在回答中提到的变化是什么吗?
如博文中所述,如果 Apache 与 VirtualHost 的请求不匹配,它将回退到使用 Apache 在读取其配置文件时找到的第一个 VirtualHost。因此,如果打算由第二个 VirtualHost 处理的请求不匹配,如果那是第一个 Apache 看到的,它将使用上面的第一个。一个可能的原因可能是因为您使用的是“_default_
”而不是“*”,因为我不希望在这种情况下看到这种情况。以上是关于使用 apache mod_wsgi 的 Django 多个站点:请求到错误的站点的主要内容,如果未能解决你的问题,请参考以下文章
使用 mod_wsgi 和 django 运行 Apache
Apache + mod_wsgi 与 nginx + gunicorn
如何在 Apache 和 mod_wsgi 中使用 Flask 路由?
使用 Apache 和 mod_wsgi 在 Centos 上设置 Django
Django/mod_wsgi/Apache - mod_wsgi 没有使用为其编译的 Python 版本 - “ModuleNotFoundError: No module named 'math'