简介
说到Django服务器,有相当多的选择。可能很难知道哪种设置适合您。虽然每种设置都不同,但它们都有自己的优点和缺点。在本文中,我们将尝试探索最常见的Django服务器,并指出与它们相关的优缺点。
One-Django开发服务器
Django开发服务器随Django一起提供,可以使用以下命令运行:
1django-admin.py runserver
这将启动默认情况下使用端口8000上的本地主机运行的轻量级Web服务器。您可以通过将类似以下内容作为添加的参数传入来修改此设置:
1django-admin.py runserver 10.0.0.150:8001
这将使Web服务器在端口8001上使用IP 10.0.0.150为您的Django应用程序提供服务。虽然您可以传入各种其他选项,但上面的选项是最常见的。
Django开发服务器只是一个开发服务器。正如Django官方文档)。然而,它的目的是作为一种在开发环境中测试应用程序的简单方法,而不会增加在Web服务器上安装/配置完整版本的开销。
Django开发服务器的突出之处在于它重量轻,使用起来非常简单。它可以提供您的静态文件,而无需将它们收集到任何特定位置。每次保存文件时,开发服务器也会重新启动。这是有帮助的,因为大多数用于Python的Web服务器都会缓存您的应用程序,以消除启动时间的需要,但如果代码发生更改,则需要重新启动,以便缓存新的副本。
Django开发服务器的明显缺点是它还没有做好生产准备,应该只用于开发目的。它不会在任何给定时间处理大量请求或加载。除此之外,对于那些寻求快速启动和运行Django的人来说,这是一个很好的选择。
双模_WSGI
Mod_wsgi是最流行的用于apache的PythonWSGI适配器模块,如果您正在使用apache作为您的Web服务器,则强烈推荐使用该方法。
一旦安装了mod_wsgi,就很容易实现。只需将以下行添加到您的ApacheVirtualHost条目中:
1WSGIScriptAlias /yourapp /opt/yourenv/yourapp.wsgi
您为WSGIScriptAlias指令提供的第一个参数是URL挂载点。因此,如果此VirtualHost域是myDomain.com域,那么您的应用程序将显示在http://mydomain.com/yourapp.
如果您的Django应用程序位于Apache配置为可供Apache访问的目录之外,则还需要将以下内容添加到您的Virtualhost条目中:
1<Directory /opt/yourenv>
2Order allow,deny
3Allow from all
4</Directory>
请注意,如果您想要在域的根目录下安装WSGI应用程序,您可以使用/
,但这有一个小小的警告。这样做时,在DocumentRoot中找到的静态文件不再由Apache提供服务,而是由WSGI应用程序提供。要解决此问题,只需使用Alias
指令映射您的静态文件,如下所示:
1Alias /static/ /opt/yourenv/static/
与WSGIScriptAlias指令一样,第一个参数是挂载点。第二个选项是文件所在的静态目录的路径。
Mod_wsgi的积极之处在于,它是为与Apache无缝集成而构建的。这对于任何使用Apache作为他们的主要Web服务器的人来说都是非常好的。
Mod_wsgi的缺点是它只适用于apache。因此,如果您更喜欢或需要其他Web服务器,如Nginx、Lighttpd、Cherokee等,那么您就不走运了。它也不像我们将讨论的其他一些选择那样轻量级。
Three-uWSGI
UWSGI是一个实现WSGI协议的服务器,以便与其他Web服务器进行通信,如Nginx、Apache、Cherokee等。它的最终目标是处理您的Python代码的解释,而像上一句中提到的Web服务器则处理静态文件和其他请求。UWSGI是为Python编写的,因此只需运行以下命令即可轻松安装:
1sudo pip install uwsgi
用于Django的uWSGI的实现相当简单。Django项目站点上有关于这个主题的很好的文档,可以在[here](https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/uwsgi/中找到。
一旦按照Django文档所示安装并运行了uWSGI,剩下的工作就是从您的主Web服务器代理到uWSGI。如何做到这一点取决于您的Web服务器,但通常非常简单。
使用uWSGI的好处是它非常轻,与Web服务器分开运行(以免Web服务器进程过载),并且相对容易设置。
其中一些缺点是必须设置除Web服务器之外的另一台服务器的开销,以及需要从主Web服务器代理到uWSGI。如果您不介意在配置中弄脏一点,uWSGI是一个很好的选择。
Four-Gunicorn
Gunicorn是一个Python WSGI HTTP服务器,与uWSGI非常相似。我个人使用Gunicorn,但这并不一定意味着它是最好的。我使用Gunicorn是因为它设置简单,并且很容易与Django集成。它的安装方式与uWSGI基本相同,使用以下命令:
1sudo pip install gunicorn
您可以在)。
与uWSGI一样,您必须从主Web服务器代理Gunicorn。这对Gunicorn来说并不比对uWSGI容易。
独角兽的体重也很轻。它是否比uWSGI更快,这是一个非常有争议的问题。这在很大程度上与您如何配置Gunicorn或uWSGI有关。两者都可以达到非常令人印象深刻的性能水平,尽管有人提到Gunicorn在高负载下工作得更好。
Gunicorn的缺点与uWSGI大致相同,尽管我个人发现Gunicorn比uWSGI更容易配置。它的配置和设置仍然不如在Apache中使用mod_wsgi那么快或简单,但在性能级别上没有可比性。
总结
还有许多我们没有介绍的其他选项,如Flup、FastCGI、mod_python等。
Flup并没有被广泛使用,所以我不推荐它。FastCGI更适合于共享主机环境,而不是像DigitalOcean这样的东西,在那里你不会共享网络服务器或资源。用于阿帕奇的mod_python确实可以工作,但在大多数文档中,您会发现mod_wsgi将是推荐的路线,因为它的工作效果要好得多。
那么,哪种方法才是赢家呢?老实说,这取决于你要找的是什么。如果您喜欢Apache和简单的设置和集成,那么一定要使用mod_wsgi。如果你不使用阿帕奇,我建议你选择uWSGI或Gunicorn。两者都有各自的优点,在任何Django应用程序中都能很好地工作。当然,在开发环境中,没有理由不使用内置的Django开发服务器!