我有两个mod_wsgi
django网站和四个域名。两个域指向每个站点。当我使用chrome中的所有四个域访问我的两个站点时,它们都可以正常工作。但只是大部分时间。有时,给定域名,会突然显示错误的站点。完全出乎意料。
这变得非常混乱,因为这种行为完全不可预测。我在网站A上关注了一些内部链接,突然间,来自网站B的404 error
出现了(当然,网站中的网址无法解析,因为它是来自网站A的网址)。我可以在不更改网址的情况下刷新页面,然后突然它会带回网站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恶魔所拥有。
答案 0 :(得分:3)
阅读:
这描述了在Apache / mod_wsgi下运行Django时可以混合网站响应的所有常见原因。
除此之外,如果不小心您的网站共享一个共同的父域,您也可以看到问题。为此,如果每个站点都已设置并且实际上共享相同的cookie,则可能必须调整cookie域或名称。
还要注意为所有站点(例如memcache)共享公共后端服务,因为只要不同的站点使用相同的数据密钥,就会存在争用。对于该设置,要使用不同的memcache密钥前缀来保持数据分离。
答案 1 :(得分: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>
此外,不是在Apache配置中使用WSGIPythonPath
,而是在wsgi.py
文件的开头添加此行(此示例适用于siteA,正确更改为siteB):
import sys
sys.path.append('/home/me/siteA')
答案 2 :(得分: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"
重启apache
$ apachectl -k graceful
问题解决了。