我目前使用 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 更可取,因为:
- 它不需要任何额外的移动部件(例如 flup)
- 您不需要停止和启动 python 解释器,它由 mod-wsgi 负责。
在嵌入模式下,它比 mod-python 更可取,因为:
- mod-python 的开发已停止,转而使用 mod-wsgi
- mod-wsgi 最终将支持 python 3k。
- 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”的唯一性。
祝你好运。