3

我有两个mod_wsgidjango 站点和四个域名。两个域指向每个站点。当我使用 chrome 中的所有四个域访问我的两个站点时,它们都可以正常工作。但只是大多数时候。有时,给定一个域,会突然显示错误的站点。完全出乎意料。

这变得非常令人困惑,因为这种行为是完全不可预测的。我关注了站点 A 上的一些内部链接,突然间,404 error出现了站点 B 的一个(自然地,该 url 无法在站点 B 的 url 中解析,因为它是站点 A 的 url)。我可以在不更改 url 的情况下刷新页面,突然它会带回站点 A。或者它会404再次停留在错误的站点中,你永远不会知道。

我已经在代理(例如 hidemyass.com)上尝试过它,并且发生了相同的不可预测的结果。

唯一可以预见的是,在 之后apachectl -k graceful,有一段时间没有站点切换,但之后,它只是每两页发生一次。我向你保证,这不是偏见。

这是我的httpd:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.siteA.tk
    ServerAlias siteA.tk
    WSGIScriptAlias / /home/me/siteA/siteA/wsgi.py
    Alias /static/ /var/www/siteA/static/

</VirtualHost>

<VirtualHost *:80>
    ServerName www.siteA.com
    ServerAlias siteA.com
    WSGIScriptAlias / /home/me/siteA/siteA/wsgi.py

    Alias /static/ /var/www/siteA/static/
</VirtualHost>

<VirtualHost *:80>
    ServerName www.siteB.tk
    ServerAlias siteB.tk

    WSGIScriptAlias / /home/me/siteB/siteB/wsgi.py

</VirtualHost>

<VirtualHost *:80>
    ServerName www.siteB.com
    ServerAlias siteB.com

    WSGIScriptAlias / /home/me/siteB/siteB/wsgi.py
</VirtualHost>


<Directory /var/www/siteA/static>
    Order deny,allow
    Allow from all
</Directory>



WSGIPythonPath /home/me/siteA:/home/me/siteB

请帮忙,我好害怕,就像我的电脑被某个 Apache 恶魔附身了。

4

3 回答 3

3

去阅读:

这描述了在 Apache/mod_wsgi 下运行 Django 时,您可以获得混合站点响应的所有常见原因。

除此之外,如果您的站点共享一个共同的父域,如果不小心,您也会看到问题。为此,如果每个站点都已设置并有效共享相同的 cookie,您可能必须调整 cookie 域或名称。

还要注意为所有站点共享公共后端服务,例如 memcache,因为不同站点使用相同的数据键可能会发生争用。对于该设置,使用不同的 memcache 键前缀来保持数据分离。

于 2013-10-26T14:39:30.593 回答
0

自我实现。

解决方案是更改 django 生成的 wsgi.py 文件。事实上,它在评论中特别指出:

# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "siteA.settings"

我使用了立即简单的选项,并将注释下方的给定行替换为

os.environ["DJANGO_SETTINGS_MODULE"] = "yoursite.settings"

重启阿帕奇

$ apachectl -k graceful

问题解决了。

于 2013-10-26T20:35:16.523 回答
0

首先,像这样组合相同的站点:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.siteA.tk
    ServerAlias siteA.tk siteA.com www.siteA.com
    WSGIScriptAlias / /home/me/siteA/siteA/wsgi.py
    Alias /static/ /var/www/siteA/static/
</VirtualHost>

<VirtualHost *:80>
    ServerName www.siteB.tk
    ServerAlias siteB.tk siteB.com www.siteB.com

    WSGIScriptAlias / /home/me/siteB/siteB/wsgi.py
</VirtualHost>

此外,不要WSGIPythonPath在 Apache 配置中使用,而是在文件开头添加这一行wsgi.py(此示例适用于站点 A,为站点 B 正确更改):

import sys
sys.path.append('/home/me/siteA')
于 2013-10-26T09:24:42.767 回答