使用 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>     

我尝试使用WSGIDaemonProcessWSGIProcessGroup 使站点在不同的进程中运行,但是请求仍然只发送到其中一个。

你有什么想法吗?

【问题讨论】:

ServerName中删除https:// 【参考方案1】:

正如有人指出的那样,您最初的问题是您不应该在 ServerName 中使用 URI,它必须只是主机名。除了解决这个问题,请确保您阅读:

http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.html

由于 ServerName 设置错误,您遇到了该帖子中描述的默认 VirtualHost 问题的变体。

【讨论】:

我从ServerName 中删除了https,现在它们是staging.mydomain.comstaging-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

Django/Apache 使用 mod_wsgi 冻结

如何在 Apache 和 mod_wsgi 中使用 Flask 路由?

使用 Apache 和 mod_wsgi 在 Centos 上设置 Django

Django/mod_wsgi/Apache - mod_wsgi 没有使用为其编译的 Python 版本 - “ModuleNotFoundError: No module named 'math'