Django 最干净和最快的服务器设置

47 投票
13 回答
24341 浏览
提问于 2025-04-10 23:43

我准备上线一个中型网站,使用的是Django框架。我有一台专用的Ubuntu服务器。

我对该用什么服务器软件感到很困惑。所以我想,为什么不问问StackOverflow呢。

我想要的东西是:

  • 容易设置
  • 快速且资源占用少
  • 能处理媒体文件
  • 可以在同一台服务器上运行多个Django网站
  • 我不想安装PHP或其他占用资源的东西,因为我用不上。

我听说过Apache上的mod_wsgi和mod_python,还有nginx和lighty。这些各有什么优缺点?我是不是漏掉了什么?

@Barry: 我觉得Apache对我来说太臃肿了。那还有其他选择吗?

@BrianLy: 好吧,我会再看看mod_wsgi。但如果我用lighty来处理静态文件,那我还需要Apache吗?我也能用lighty直接运行Django应用,这样有问题吗?抱歉我这么笨 :-)

更新: 那lighty和nginx呢?在什么情况下它们是最佳选择?

13 个回答

6

正如@Barry所说,文档中提到了 mod_python。我没有在Ubuntu上作为服务器使用过,但在Solaris上使用mod_wsgi的体验很好。你可以在mod_wsgi和Django的文档中找到相关信息,这些内容在mod_wsgi网站上都有。

快速回顾一下你的需求:

  • 容易设置 我发现apache 2.2的构建和安装相对简单。
  • 快速且资源占用少 我觉得这取决于你的使用情况和流量。* 你可能不想用Apache来服务所有文件,可以考虑用LightTPD(lighty)来处理静态文件。
  • 可以服务媒体文件 我猜你的意思是图片、Flash文件?Apache可以做到这一点。
  • 同一服务器上可以托管多个网站 Apache支持虚拟服务器托管。
  • 不想安装其他扩展 在Apache配置中注释掉你不想要的内容即可。
9

我正在使用Cherokee这个服务器。

根据他们的性能测试(不过要稍微保留点怀疑态度),Cherokee在处理负载方面比Lighttpd和nginx都要好……但这并不是我使用它的原因。

我使用它是因为只要输入cherokee-admin,就能启动一个新的服务器,你可以用一次性密码登录,并通过一个设计得非常漂亮的网页管理界面来配置整个服务器。这真是个超棒的功能。它已经为我节省了很多时间。而且也为我的服务器节省了很多资源!

至于django,我是以线程方式运行它的SCGI进程,效果很好。Cherokee也能保持它运行。这又是一个很不错的功能。

目前Ubuntu软件库里的版本很旧,所以我建议你使用他们的PPA。祝你好运。

27

因为我想要更深入的答案,所以决定自己深入研究这个问题。如果我有什么理解错误,请告诉我。

一些一般性的建议是,使用一个单独的网络服务器来处理媒体文件。这里的“单独”是指一个不运行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的限制,你的服务器应该以分叉模式运行,而不是线程模式。

这就是我目前的研究情况,但我想听听更多的意见和经验。

撰写回答