设置 Django 服务器来为多个站点提供服务的最佳方法是什么?

设置 Django 服务器来为多个站点提供服务的最佳方法是什么?

我目前使用 Apache 2.0 和 FastCGI 来为我的 Django 站点提供服务(我从一个服务器/IP 托管多个站点)。每个站点都有自己的 FastCGI 进程,这可以阻止 Apache 分叉多个副本(这会占用大量内存),这意味着我可以重新启动单个 Django 站点后端而无需重新启动 Apache。

这是明智的做事方式吗?还有其他更好的选择吗?

答案1

你肯定需要 mod-wsgi。

mod-wsgi 是由多年前开发 mod-python 的同一批人开发的。现在,对于所有现代应用程序框架(包括 django),都推荐使用 mod-wsgi 而不是 mod-python。

基本上,mod-wsgi 有两种操作模式:嵌入式(最快 - 有点像 mod-python,但速度更快)或守护进程(有点像 fast-cgi)。

在守护进程模式下,它比 fast-cgi 更可取,因为:

  1. 它不需要任何额外的移动部件(例如 flup)
  2. 您不需要停止和启动 python 解释器,它由 mod-wsgi 负责。

在嵌入模式下,它比 mod-python 更可取,因为:

  1. mod-python 的开发已停止,转而使用 mod-wsgi
  2. mod-wsgi 最终将支持 python 3k。
  3. mod-wsgi 比 mod-python 更快

这是文档:http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

/ Richy

答案2

早期我使用 nginx 和 supervisord (俄罗斯的小教程http://buzzja.mine.nu/blog/2009/02/21/dzhango-za-stenoj/

答案3

我使用 Apache2 和 mod_python 取得了不错的效果。您只需向 apache 添加一些 django-app. 特定内容,类似于此(示例取自运行 review-board.org 的 ReviewBoard 的 VHost):

<Location "/reviewboard">
    SetHandler mod_python
    PythonPath "['/usr/lib/python2.4/site-packages/django'] + ['/usr
/local/reviewboard'] + ['/usr/local/reviewboard/djblets', '/usr/local'] + sys.pa
th"
    SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings
    PythonHandler django.core.handlers.modpython
    PythonAutoReload Off
    PythonDebug Off
    PythonInterpreter reviewboard
</Location>

在这种情况下,重要的设置是不同 django 应用程序中“PythonInterpreter”的唯一性。

祝你好运。

相关内容