你会推荐哪个?哪个更快,更可靠?apache mod_python 还是 nginx/lighttpd FastCGI?
7 回答
我都做过,而且 Apache/mod_python 往往更容易使用和更稳定。但是这些天我跳到了 Apache/mod_wsgi,这是我想要的一切,还有更多:
- 轻松管理守护进程。
- 结果,更好的进程隔离(使用 mod_python 在同一个 Apache 配置中运行多个站点几乎总是以麻烦告终——当你这样做时,环境变量和 C 扩展在站点之间泄漏)。
- 轻松重新加载代码(设置正确,您只需触摸
.wsgi
文件即可重新加载,而不是重新启动 Apache)。 - 更可预测的资源使用。使用 mod_python,给定的 Apache 子进程的内存使用可以跳跃很多。使用 mod_wsgi 它非常稳定:一旦加载了所有内容,您就知道它将使用多少内存。
使用 FastCGI 的 lighttpd 名义上会更快,但实际上运行 python 代码所花费的时间和它所做的任何数据库访问都绝对会让你在 Web 服务器之间获得的任何性能优势相形见绌。
如果您想在 django 之外编写执行摘要身份验证或任何花哨的 HTTP 标头获取/设置之类的代码,mod_python 和 apache 将在功能方面为您提供更多的灵活性。也许您想使用 apache 的其他内置功能,例如 mod_rewrite。
如果内存是一个问题,远离 apache/mod_python 会有很大帮助。Apache 倾向于使用大量的 RAM,并且粘合到所有 apache 功能中的 mod_python 代码也占用了大量的内存空间。更不用说 apache 的多进程特性往往会消耗更多的 RAM,因为每个进程都会增长到它最密集的请求的大小。
带有 mod_wsgi 的 Nginx
就我个人而言,我已经使用 FastCGI 工作了一段时间(大约 6 个月),并且在加载页面时响应时间“似乎”比 mod___python 更快。不过,对我来说,关键原因是我看不到从同一个 apache / mod_python 安装中创建多个站点的明显方法,而 FastCGI 是相对简单的。
不过,我还没有进行任何特别彻底的实验:-)
[编辑]不过从经验来看,第一次设置 FastCGI 可能会有点痛苦。我一直想写一个指南..!
我将它与 nginx 一起使用。不确定它是否真的更快,但肯定会减少 RAM/CPU 负载。此外,运行多个 Django 进程并让 nginx 将每个 URL 前缀映射到不同的套接字也更容易。仍然没有充分利用 nginx 的 memcached 模块,但第一次测试显示出巨大的速度优势。
还有 mod_wsgi,它似乎比 mod_python 更快,并且守护模式的操作类似于 FastCGI
我推荐 WSGI 配置;我一直想放弃 apache,但服务器上总有一些遗留应用程序似乎需要它。此外,WSGI 应用程序生态非常多样化,它允许在服务器和应用程序之间以菊花链方式连接 WSGI“中间件”等巧妙的技巧。
但是,一些应用程序和 apache mod_wsgi目前存在已知问题,尤其是一些 ctypes 应用程序,因此如果您尝试运行广泛使用 ctypes 的geodjango ,请务必小心。我目前正在通过自己回到 fastcgi 来解决这些问题。