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

Ser*_*eim 21 apache django 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时也是如此 ... Sometiems我得到了site1的欢迎页面,有时我得到了site2的欢迎页面!我正在点击F5并获得不同的欢迎页面.我检查了前几个小时的所有内容,没有发现任何奇怪的事情......

拜托,在我发疯之前告诉我可能出现什么问题......

谢谢 !

Gra*_*ton 47

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

更改:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings")
Run Code Online (Sandbox Code Playgroud)

至:

os.environ["DJANGO_SETTINGS_MODULE"] = "site1.settings"
Run Code Online (Sandbox Code Playgroud)

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

也就是说,而不是:

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
Run Code Online (Sandbox Code Playgroud)

使用:

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}
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

  • 您需要为每个网站设置不同的SESSION_COOKIE_NAME或SESSION_COOKIE_PATH,因为它们位于同一个域下.请参阅http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango (3认同)
  • 这实际上有效,谢谢!但是我现在还有另一个问题:当我尝试在同一个浏览器中访问这两个站点时,它有时会将我从site2(当我访问site1时)注销 - 但不是相反...这可能是因为我有/ site1和/ site2?我应该尝试Erik提出的建议并拥有site1.sites.gr和site2.sites.gr吗? (2认同)