在WSGI中两个独立的Django站点(根目录和/two)

5 投票
2 回答
842 浏览
提问于 2025-04-18 04:55

经过几个小时的尝试,我决定放弃并向大家求助 :)

我在Debian 7上用Apache2运行着两个Django 1.6的网站,只有一个虚拟主机。

我想让这个虚拟主机的根域名指向一个Django网站(比如:mydomain.com),而另一个网站则用一个单独的别名(比如:mydomain.com/two)。

我可以让两个别名像下面这样工作:

    WSGIDaemonProcess test1 python-path=/usr/local/projects/project_one:/usr/local/virtualenvs/project/lib/python2.7/site-packages
    WSGIScriptAlias /one /usr/local/projects/project_one/project_one/wsgi.py
    <Location /one>
            WSGIProcessGroup test1
    </Location>

    WSGIDaemonProcess test2 python-path=/usr/local/projects/project_two:/usr/local/virtualenvs/project/lib/python2.7/site-packages
    WSGIScriptAlias /two /usr/local/projects/project_two/project_two/wsgi.py
    <Location /two>
            WSGIProcessGroup test2
    </Location>

这样做的话,以下的域名可以正常访问:

http://mydomain.com/one/

http://mydomain.com/two/

但是如果我想用根域名(mydomain.com)和另一个(mydomain.com/two),就不行了:

    WSGIDaemonProcess test1 python-path=/usr/local/projects/project_one:/usr/local/virtualenvs/project/lib/python2.7/site-packages
    WSGIScriptAlias / /usr/local/projects/project_one/project_one/wsgi.py
    <Location />
            WSGIProcessGroup test1
    </Location>

    WSGIDaemonProcess test2 python-path=/usr/local/projects/project_two:/usr/local/virtualenvs/project/lib/python2.7/site-packages
    WSGIScriptAlias /two /usr/local/projects/project_two/project_two/wsgi.py
    <Location /two>
            WSGIProcessGroup test2
    </Location>

我觉得不行的原因是,它试图用第二个网站的WSGI文件来运行第一个网站:
WSGI脚本 '/usr/local/projects/project_one/project/wsgi.py'。

我的问题是,怎样才能让第二种尝试成功,这样mydomain.com就指向一个项目,而mydomain.com/two指向另一个项目呢……

我最开始是按照这个帖子的方法走到现在的,但一直找不到解决这个问题的办法。

感谢大家的支持,
Mark

2 个回答

0

可能有点晚了,但你可以调整这些wsgi的顺序,这样应该就能正常工作了(我两个wsgi的flask应用都是这样解决的)。当你第一次使用根地址时,它会把所有地址都当作根子域名来处理,而忽略第二个别名。只需把/two放在第一个地址,然后再放根地址就可以了:

WSGIDaemonProcess test2 python-path=/usr/local/projects/project_two:/usr/local/virtualenvs/project/lib/python2.7/site-packages
WSGIScriptAlias /two /usr/local/projects/project_two/project_two/wsgi.py
<Location /two>
        WSGIProcessGroup test2
</Location>

WSGIDaemonProcess test1 python-path=/usr/local/projects/project_one:/usr/local/virtualenvs/project/lib/python2.    7/site-packages
WSGIScriptAlias / /usr/local/projects/project_one/project_one/wsgi.py
<Location />
        WSGIProcessGroup test1
</Location>

也许有人会觉得这个有用

4

试着在 WSGIScriptAlias 指令中添加 "process-group" 和 "application-group" 这两个选项:

WSGIScriptAlias / /usr/local/projects/project_one/project_one/wsgi.py process-group=test1 application-group=%{GLOBAL}

...

WSGIScriptAlias /two /usr/local/projects/project_two/project_two/wsgi.py process-group=test2 application-group=%{GLOBAL}

撰写回答