Django 最干净和最快的服务器设置
我准备上线一个中型网站,使用的是Django框架。我有一台专用的Ubuntu服务器。
我对该用什么服务器软件感到很困惑。所以我想,为什么不问问StackOverflow呢。
我想要的东西是:
- 容易设置
- 快速且资源占用少
- 能处理媒体文件
- 可以在同一台服务器上运行多个Django网站
- 我不想安装PHP或其他占用资源的东西,因为我用不上。
我听说过Apache上的mod_wsgi和mod_python,还有nginx和lighty。这些各有什么优缺点?我是不是漏掉了什么?
@Barry: 我觉得Apache对我来说太臃肿了。那还有其他选择吗?
@BrianLy: 好吧,我会再看看mod_wsgi。但如果我用lighty来处理静态文件,那我还需要Apache吗?我也能用lighty直接运行Django应用,这样有问题吗?抱歉我这么笨 :-)
更新: 那lighty和nginx呢?在什么情况下它们是最佳选择?
13 个回答
正如@Barry所说,文档中提到了 mod_python。我没有在Ubuntu上作为服务器使用过,但在Solaris上使用mod_wsgi的体验很好。你可以在mod_wsgi和Django的文档中找到相关信息,这些内容在mod_wsgi网站上都有。
快速回顾一下你的需求:
- 容易设置 我发现apache 2.2的构建和安装相对简单。
- 快速且资源占用少 我觉得这取决于你的使用情况和流量。* 你可能不想用Apache来服务所有文件,可以考虑用LightTPD(lighty)来处理静态文件。
- 可以服务媒体文件 我猜你的意思是图片、Flash文件?Apache可以做到这一点。
- 同一服务器上可以托管多个网站 Apache支持虚拟服务器托管。
- 不想安装其他扩展 在Apache配置中注释掉你不想要的内容即可。
我正在使用Cherokee这个服务器。
根据他们的性能测试(不过要稍微保留点怀疑态度),Cherokee在处理负载方面比Lighttpd和nginx都要好……但这并不是我使用它的原因。
我使用它是因为只要输入cherokee-admin
,就能启动一个新的服务器,你可以用一次性密码登录,并通过一个设计得非常漂亮的网页管理界面来配置整个服务器。这真是个超棒的功能。它已经为我节省了很多时间。而且也为我的服务器节省了很多资源!
至于django,我是以线程方式运行它的SCGI进程,效果很好。Cherokee也能保持它运行。这又是一个很不错的功能。
目前Ubuntu软件库里的版本很旧,所以我建议你使用他们的PPA。祝你好运。
因为我想要更深入的答案,所以决定自己深入研究这个问题。如果我有什么理解错误,请告诉我。
一些一般性的建议是,使用一个单独的网络服务器来处理媒体文件。这里的“单独”是指一个不运行Django的网络服务器。这个服务器可以是:
- Lighttpd(轻量级服务器)
- Nginx(引擎X)
- 或者其他一些轻量级的服务器
然后,对于Django,你可以选择不同的方式来运行。你可以:
通过Apache来运行Django,并且:
mod_python
这是一个稳定且推荐的方式,文档也很齐全。缺点是占用很多内存。
mod_wsgi
根据我的理解,mod_wsgi是一个较新的选择。它似乎更快,资源占用也更少。
mod_fastcgi
使用FastCGI时,你是把Django的服务交给另一个进程来处理。因为mod_python在每个请求中都包含一个Python解释器,所以它占用很多内存。这是一种绕过这个问题的方法。不过也有一些安全隐患。
具体做法是,你在一个单独的进程中启动Django FastCGI服务器,然后通过Apache的重写规则在需要时调用这个进程。
或者你可以:
在不使用Apache的情况下,使用另一个原生支持FastCGI的服务器来运行Django:
(文档提到,如果你没有任何Apache特定的需求,可以这样做。我猜这样做的原因是为了节省内存。)
- Lighttpd
这是运行YouTube的服务器。它似乎快速且易于使用,但我看到有关于内存泄漏的报告。
- nginx
我看到一些基准测试声称这个服务器甚至比Lighttpd还快。不过大部分文档是俄文的。
还有一点,由于Python的限制,你的服务器应该以分叉模式运行,而不是线程模式。
这就是我目前的研究情况,但我想听听更多的意见和经验。