【问题标题】:WSGI vs uWSGi with Nginx [closed]使用 Nginx 的 WSGI 与 uWSGi [关闭]
【发布时间】:2011-12-06 02:10:39
【问题描述】:

谁能解释一下在 Nginx 中使用 WSGI VS uWSGI 的优缺点。

目前我正在为 Django 网站构建一个生产服务器,我已经准备好但无法决定我应该使用 WSGI 还是 uWSGI。您能否详细解释每种配置的区别?哪种配置的扩展性最好?

提前致谢

【问题讨论】:

  • This blog post是对很多Python WSGI服务器的非常详细的比较,最后有总结和一些建议。
  • 并且还使用了一些服务器的配置,这些配置真的很狡猾,使它们看起来比实际情况更糟。人们必须小心阅读该比较的内容。
  • WSGI 是一个规范。 uWSGI 提供了 WSGI 规范的实现。你无法比较它们。您只能比较不同的实现。

标签: python django nginx wsgi uwsgi


【解决方案1】:

好吧,伙计们,这种混淆是因为缺乏来自多个来源的详细信息,以及这些协议的命名,以及 WSGI 的实际含义。

总结:

  1. WSGI 和 uwsgi 都是协议,而不是服务器。它用于与 Web 服务器通信以实现负载平衡,尤其是利用纯 HTTP 无法提供的额外功能。到目前为止,Nginx 和 Cherokee 已经实现了这个协议。
  2. uWSGI 是一个服务器,它实现的协议之一是 WSGI(不要将 uwsgi 协议与 uWSGI 服务器混淆)。 WSGI 是一个 Python specification。 WSGI 规范有几种实现,它的目的不仅仅是用于应用程序服务器/Web 服务器,但也有相当多的 WSGI 应用程序服务器(即 CherryPy,它也恰好有一个生产就绪的 WSGI 兼容 Web 服务器,如果你还不够困惑的话!)。
  3. 将 uwsgi 与 WSGI 进行比较就是将橙子与苹果进行比较。

【讨论】:

  • 错字:“1. uwsgi 是协议而不是服务器。” --> "1. WSGI 是协议而不是服务器。"
  • 其实我写的1是对的,但是确实WSGI和uwsgi一样是一个协议,所以你写的两个陈述都是正确的:)。当然,没有1的其余上下文。它是uWSGI服务器使用的协议。 wiki.nginx.org/HttpUwsgiModule, - “不要将 uwsgi 协议与 uWSGI 服务器(使用 uwsgi 协议)混淆”
  • 啊,好的。我曾以为您试图在声明 1.“wsgi 是协议..”和 2.“uwsgi 是实现协议的服务器”之间进行对比。
  • @DerekLitz,当我们 python manage.py runserver 时,django 运行在哪些服务器上?
  • python manage.py runserver 是 Django 内置的内部服务器。它不是 apache、nginx、gunicorn 或其他任何东西。 django-extensions 提供了一个使用 Werkzeug 框架的 runserver_plus,但它与任何 runserver 一样接近服务器。
【解决方案2】:

通常最好在与主 Web 服务器不同的进程中运行 Python。这样一来,Web 服务器就可以拥有许多非常快速地为静态内容提供服务的小线程,而您的独立 Python 进程将又大又重,并且每个都运行自己的 Python 解释器。如此简单的WSGI 很糟糕,因为它使用一个大的 Python 解释器使你的每一个 nginx 线程膨胀。在nginx 后面使用flupgunicornuWSGI 会好得多,因为这可以释放 nginx 来简单地提供内容,并让您可以选择运行多少个小型轻量级 nginx 线程,而与您选择的数量无关用于提供动态内容的重量级 Python 线程。目前人们似乎对gunicorn 很满意,但这三个选项中的任何一个都应该可以正常工作。

展望未来,当负载开始变得严重时,它还可以让您将 Python 移动到另一台服务器。

【讨论】:

  • 对你的回答有点困惑。我看不到他提到在 nginx 中运行任何类型的 WSGI 实现。他引用了主要的 wsgi.org 站点。因此,他最初对 WSGI 和 uWSGI 的比较首先有点愚蠢,因为 uWSGI 是 WSGI 规范的实现。你自己以一种令人困惑的方式使用了通用的 WSGI 术语,说“它用一个大的 Python 解释器使你的每一个 nginx 线程膨胀”。 WSGI 规范本身无法做到这一点,只有实现才能做到。
  • 如果我们比较 nginx + mod_wsgi(可插入模块)和 nginx + uWSGI(应用服务器容器),这可能是有意义的。
  • 那么在使用 Nginx 运行 Python Web 应用程序时,由于 Manlio Perillo 的 mod_wsgi 是死软件,不推荐使用,那么好的解决方案是使用 gunicorn 或 uWSGI 的 WSGI,还是使用 Flup 的 FastCGI?跨度>
【解决方案3】:

我相信这里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,我们将在本指南中使用它。确保安装它以跟随。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-17
    • 2017-06-23
    • 2015-11-25
    • 2011-11-25
    • 2012-02-28
    • 2015-02-08
    • 2017-11-27
    • 2012-10-24
    相关资源
    最近更新 更多