使用mod_wsgi在Apache上部署多个django应用程序

时间:2012-07-16 13:38:10

标签: django apache mod-wsgi

我想在同一主机中部署两个不同的django应用程序:第一个将对应于url / site1,第二个对应于url / site2。这是我的配置:

LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py

WSGIPythonPath /var/www/py/site1:/var/www/py/site2

<Directory "/var/www/py/site1/site1">
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

<Directory "/var/www/py/site2/site2">
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

此处还有两个应用程序的wsgi.py文件

import os
import sys

path = '/var/www/py/site1'
if path not in sys.path:
    sys.path.append(path)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

现在,这是我的问题。当我去我的服务器时,让我们说http://app1.sites.gr/site1它有时会加载site1,有时它会加载site2 !!!!当我访问http://app1.sites.gr/site2时也是如此......有些我获得了site1的欢迎页面,有时我得到了site2的欢迎页面!我正在点击F5并获得不同的欢迎页面。我已经检查了前几个小时的所有内容,并没有发现任何奇怪的事情......

请在疯狂之前告诉我可能出现什么问题...

谢谢!

3 个答案:

答案 0 :(得分:46)

这是Django 1.4生成的wsgi.py文件的问题。在尝试在同一进程中托管两个不同的Django实例时,它将无法工作,即使在单独的子解释器中也是如此。

变化:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings")

为:

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

或者更好的是仍然使用守护进程模式并委托每个守护进程模式在不同的守护进程组中运行。

即代替:

WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py

WSGIPythonPath /var/www/py/site1:/var/www/py/site2

使用:

WSGIDaemonProcess site1 python-path=/var/www/py/site1
WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py process-group=site1 application-group=%{GLOBAL}

WSGIDaemonProcess site2 python-path=/var/www/py/site2
WSGIScriptAlias /site2 /var/www/py/site1/site2/wsgi.py process-group=site2 application-group=%{GLOBAL}

更新

请注意,现在有一篇关于这个和其他原因的博客文章。

答案 1 :(得分:2)

你的应用程序在同一个端口上侦听,并且似乎没有代理将它们委托给不同的端口。

您必须在apache中设置VirtualHosts或使用Nginx,lighttpd或其他内容来创建正确的代理

答案 2 :(得分:1)

Graham Dumpleton的回答是你可能想要读得最接近的回答,但我建议通过在不同子域的根目录而不是在同一域的非根位置托管你的两个Djangos来为自己节省很多心痛。运行非根Django站点有许多问题恕我直言。

祝你好运!