带有Nginx的WSGI vs uWSGi [关闭]


88

在Nginx上使用WSGI VS uWSGI时,谁能解释优点/缺点。

目前,我正在为Django网站构建生产服务器,该服务器已经准备好了,但无法决定应该使用WSGI还是uWSGI。您能否详细说明每种配置的不同之处?哪种配置最合适?

提前致谢


这篇博客文章是对许多Python WSGI服务器的非常详细的比较,并在最后总结了一些建议。
Lowe Thiderman,2011年

并且还对某些服务器进行了配置,这些服务器确实很狡猾,使它们看起来比实际情况更糟。必须谨慎阅读该比较的内容。
格雷厄姆·邓普顿

25
WSGI是一个规范。uWSGI提供了WSGI规范的实现。您无法比较它们。您只能比较不同的实现。
格雷厄姆·邓普顿

Answers:


100

好的,伙计们的困惑是由于缺乏多个来源的详细信息,这些协议的命名以及WSGI实际上是什么。

概要:

  1. WSGI和uwsgi都是协议,而不是服务器。它用于与Web服务器通信以实现负载平衡,尤其是利用纯HTTP无法提供的额外功能。到目前为止,Nginx和Cherokee已经实现了该协议。
  2. uWSGI是服务器,它实现的协议之一是WSGI(请不要将uwsgi协议与uWSGI服务器混淆)。WSGI是Python规范。WSGI规范有多种实现,它不仅可以用于应用程序服务器/ Web服务器,而且还可以用于很多WSGI应用程序服务器(例如CherryPy,它也恰好具有可用于生产的WSGI兼容的Web服务器)。 ,如果您还不够困惑!)。
  3. uwsgi与WSGI的比较是桔子与苹果的比较。

3
错字:“ 1。uwsgi是协议而不是服务器。” ->“ 1. WSGI是协议而不是服务器。”
阿曼2012年

9
实际上,我为1编写的内容是正确的,但是WSGI和uwsgi一样都是协议,因此您编写的两个语句都是正确的:)。当然,在没有上下文1的情况下,它是uWSGI服务器使用的协议。wiki.nginx.org/HttpUwsgiModule,- “请勿将uwsgi协议与uWSGI服务器(使用uwsgi协议混淆)”
Derek Litz

4
啊好吧。我以为您正在尝试在语句1.“ wsgi是协议..”和2.“ uwsgi是实现该协议的服务器”之间划清界限。
阿曼2012年

2
@DerekLitz,我们何时在django上运行哪些服务器python manage.py runserver
Piyush S. Wanare '17

python manage.py runserver是内置于Django的内部服务器。它不是apache,nginx,gunicorn或其他任何东西。django-extensions提供了一个runserver_plus使用Werkzeug框架的,但是与任何服务器都非常接近runserver
Mike DeSimone

32

通常最好在与主Web服务器不同的进程中运行Python。这样,Web服务器可以具有许多微小的线程,这些线程可以非常快速地提供静态内容,而您单独的Python进程又大又重,并且每个进程都在运行自己的Python解释器。这么简单WSGI是不好的,因为它使用大型Python解释器使您的nginx线程每个膨胀。使用fluporgunicornuWSGI落后nginx更好,因为这可以释放nginx来简单地提供内容,并让您选择要运行的细小nginx线程,而与您选择为动态内容提供多少个重量级Python线程无关。人们似乎很满意gunicorn,但是这三个选项中的任何一个都可以正常工作。

展望未来,当负载开始变得严重时,它还使您有空将Python移至另一台服务器。


1
您的答案有点困惑。我看不到他提到在nginx内运行任何类型的WSGI实现。他引用了wsgi.org主站点。因此,他最初在WSGI和uWSGI之间的比较有点愚蠢,因为uWSGI是WSGI规范的实现。您自己以一种令人困惑的方式使用了通用的WSGI术语,即“它使用大型Python解释器使您的nginx线程中的每一个膨胀”。WSGI规范本身不能做到这一点,只有实现可以做到。
格雷厄姆·邓普顿2011年

1
如果我们比较nginx + mod_wsgi(可插拔模块)和nginx + uWSGI(应用程序服务器容器),这可能是有道理的。
犯罪

因此,当涉及到使用Nginx运行Python Web应用程序时,由于Manlio Perillo的mod_wsgi是死软件并且不推荐使用,所以好的解决方案是带gunicorn或uWSGI的WSGI或带Flup的FastCGI?
Gulbahar 2013年

19

我相信这里http://flask.pocoo.org/docs/deploying/uwsgi/是解决混乱问题的一个很好的答案。这个问题不是很愚蠢,碰巧看到这两个术语并且没有关于mod_PHP世界以外的工作方式的任何先验信息的人(例如,针对php或同伙的任何事情)

该站点很好地用实际术语解释了需要什么,有什么区别以及nginx的良好部署示例。


为了方便起见,此处引用了Flask Wiki的解释:

uWSGI是nginx,lighttpd和cherokee等服务器上的部署选项;有关其他选项,请参见FastCGI和独立WSGI容器。要将WSGI应用程序与uWSGI协议一起使用,您首先需要一台uWSGI服务器。uWSGI既是协议又是应用程序服务器;应用服务器可以服务uWSGI,FastCGI和HTTP协议。

最受欢迎的uWSGI服务器是uwsgi,我们将在本指南中使用它。请确保已安装它以进行后续操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.