使用WSGI在Apache下设置两个Django网站

时间:2011-06-21 08:26:25

标签: django apache wsgi

我已经按照django文档中的说明设置了一个django网站:https://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/

现在我想在同一台服务器上运行另一个版本的站点(不同的源目录,不同的数据库)。有活跃用户和使用应用#1的灵活应用,所以我想保持应用#1访问不变。我甚至不会更改urls.py甚至是app#2。

我在考虑app#2的不同端口

例如
http://192.168.1.1/load_book/123/将从应用#1加载图书 http://192.168.1.1:444/load_book/123/将从应用#2

加载图书

我是Apache和WSGI的完全菜鸟......如何设置它?

2 个答案:

答案 0 :(得分:3)

他们有相同的网址是什么意思?可能是相同的主机名吗?

假设您有2个应用:

这些都可以是由WSGI提供的Django应用程序,位于同一个Apache实例上。使用apache conf中的DirectoryLocation指令指定.wsgi加载程序文件,如上面链接的django文档中所述:

<Location /your_app>
    WSGIScriptAlias /your_app /path/to/mysite/apache/your_app/django.wsgi
    ...
</Location>
<Location /my_app>
    WSGIScriptAlias /my_app /path/to/mysite/apache/my_app/django.wsgi
    ...
</Location>

唯一真正的问题是,您需要告诉your_appmy_app它们不再位于主机的文档根目录中。为此,请向base_url添加settings.py参数,并使用此参数为urls.py中的所有条目添加前缀。这将确保当请求通过Apache时,您的python应用程序可以相应地路由它。

有关如何完成此操作的简单示例,请查看Django应用程序Bookworm的代码。

答案 1 :(得分:2)

您可以将wsgi应用程序附加到同一域下的不同子路径。如果你这样做,Django内部视图的路径仍然是相同的。您不必修改urls.py.在以下示例中,Django会将/site1视为project1的根。

查看http://code.google.com/p/modwsgi/wiki/InstallationInstructions以获取有关mod_wsgi的文档。

<VirtualHost *:80>
    ServerName www.example.com

    WSGIDaemonProcess example
    WSGIProcessGroup example
    WSGIScriptAlias /site1 /home/django/project1/deploy/wsgi.py
    <Directory /home/django/project1/deploy>
        Order deny,allow
        Allow from all
    </Directory>

    WSGIScriptAlias /site2 /home/django/project2/deploy/wsgi.py
    <Directory /home/django/project2/deploy>
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

现在,这两个站点将使用不同的python子解释器在同一个守护进程中运行。