Python 最清洁及;Django最快的服务器设置

Python 最清洁及;Django最快的服务器设置,python,django,apache,hosting,Python,Django,Apache,Hosting,我将部署一个由Django提供动力的中型站点。我有一个专用的Ubuntu服务器 我真的不知道该用哪种服务器软件。所以我想:为什么不问问我呢 我要找的是: 易于设置 快速轻松地使用资源 可以为媒体文件服务 能够在同一台服务器上为多个站点提供服务 我宁愿不安装PHP或任何其他消耗资源的东西,我也不想安装这些东西 我听说过Apache、nginx和lighty上的mod_wsgi和mod_python。这些有哪些优点和缺点?我是否错过了某个人 @Barry:不知何故,我觉得Apache对我来说太臃

我将部署一个由Django提供动力的中型站点。我有一个专用的Ubuntu服务器

我真的不知道该用哪种服务器软件。所以我想:为什么不问问我呢

我要找的是:

  • 易于设置
  • 快速轻松地使用资源
  • 可以为媒体文件服务
  • 能够在同一台服务器上为多个站点提供服务
  • 我宁愿不安装PHP或任何其他消耗资源的东西,我也不想安装这些东西
我听说过Apache、nginx和lighty上的mod_wsgi和mod_python。这些有哪些优点和缺点?我是否错过了某个人

@Barry:不知何故,我觉得Apache对我来说太臃肿了。其他选择呢

@BrianLy:好的,我将进一步查看mod_wsgi。但是,如果我使用lighty提供静态文件,为什么需要Apache呢?我还成功地为django应用程序本身提供了lighty。不管怎么说,这是坏消息吗?对不起,你这么愚蠢:-)


更新:lighty和nginx如何?当它们是最佳选择时,哪些是用例?

官方推荐的部署django项目的方法是将mod_python与apache结合使用。这在main pro中有描述,因为这是最好的文档记录、最受支持和最常见的部署方式。缺点是它可能不是最快的。

正如@Barry所说,文档使用了。我没有使用Ubuntu作为服务器,但在Solaris上使用mod_wsgi有很好的经验。您可以在网站上找到的文档

快速回顾您的需求:

  • 易于安装我发现apache 2.2的构建和安装相当容易
  • 快速方便地使用资源我认为这取决于您的使用情况和流量。*您可能不希望使用Apache为所有文件提供服务器,而使用(lighty)为静态文件提供服务器
  • 可以提供媒体文件我想你指的是图像、闪存文件?Apache可以做到这一点
  • 同一服务器上的多个站点在Apache上托管虚拟服务器
  • 而不是安装其他扩展注释掉Apache配置中不需要的任何内容

如果您使用的是lighthttpd,也可以使用FastCGI为Django提供服务。我不确定它的速度与mod_wsgi相比如何,但是如果内存服务正确,那么您将获得mod_wsgi所带来的一些好处,而mod_python所没有的好处。最主要的一点是,您可以为每个应用程序提供自己的进程(这对于保持不同应用程序的内存分离以及利用多核计算机非常有帮助)


编辑:只是为了补充关于nginix的更新,如果内存再次正常工作,nginix将使用“greenlets”处理并发性。这意味着您可能需要更加小心,以确保一个应用程序不会占用所有服务器的时间。

由于我正在寻找更深入的答案,我决定亲自深入研究这个问题。如果我有任何误解,请告诉我

一些一般建议是使用单独的Web服务器来处理媒体。所谓单独,我指的是不运行Django的Web服务器。例如,此服务器可以是:

  • Lighttpd(Lighty)
  • Nginx(EngineX)
  • 或者其他一些轻型服务器
然后,对于Django,您可以走不同的道路。您可以:

  • 通过Apache为Django提供服务,并且:

    • mod_python

      这是一种稳定的、推荐的/记录良好的方法。缺点:使用大量内存

    • mod_wsgi

      据我所知,mod_wsgi是一个较新的替代方案,它似乎更快、更容易使用资源

    • mod_fastcgi

      当使用FastCGI时,您将Django的服务委托给另一个进程。由于mod_python在每个请求中都包含一个python解释器,因此会占用大量内存。这是一种绕过该问题的方法。此外,还存在一些安全问题

      您要做的是在一个单独的进程中启动Django FastCGI服务器,然后通过重写配置apache,以便在需要时调用此进程

或者你可以:

  • 为Django提供服务时不使用Apache,但使用另一台本机支持FastCGI的服务器:

    (文档中提到,如果您没有任何特定于Apache的需求,可以这样做。我想原因一定是为了节省内存。)

    • Lighttpd
    这是运行Youtube的服务器。它看起来既快又容易使用,不过我看到过关于memoryleaks的报道

    • nginx
    我见过一些基准测试声称这台服务器甚至比lighttpd还要快。不过大部分都是用俄语记录的

另外,由于Python的限制,您的服务器应该以分叉模式运行,而不是线程模式


这是我目前的研究,但我需要更多的意见和经验。

我们在所有Django部署中都使用nginx和FastCGI。这主要是因为我们通常部署在Slicehost上,不想将所有内存都贡献给Apache。我想这将是我们的“用例”


至于关于文档大部分是俄语的评论——我发现关于的大部分信息都非常有用和准确。本网站也有Django的配置示例,您可以从中调整自己的nginx配置。

我认为最好的配置并不为人所知。但以下是:

  • 使用nginx服务请求(动态到应用程序,直接静态内容)
  • 使用PythonWeb服务器提供动态内容
  • 基于python的web服务器的两个最快速的解决方案是:

    • sudo /etc/init.d/apache2 restart