使用 Gunicorn + Nginx + Flask 有啥好处? [复制]

Posted

技术标签:

【中文标题】使用 Gunicorn + Nginx + Flask 有啥好处? [复制]【英文标题】:What benefit is added by using Gunicorn + Nginx + Flask? [duplicate]使用 Gunicorn + Nginx + Flask 有什么好处? [复制] 【发布时间】:2014-01-13 00:54:56 【问题描述】:

我看到人们正在运行 nginx + Gunicorn + Flask 之类的设置。

有人能解释一下在 Flask 面前放 Gunicorn 有什么好处吗?为什么不单独运行 Flask?运行 Gunicorn + Flask 不会消耗更多资源吗? Gunicorn 是否能够在 Flask 实例无法响应时重新启动它?

在 gunicorn 之上安装 nginx 的目的是什么?独角兽还不够吗?再次,花费更多的资源?

【问题讨论】:

Gunicorn 是一个 Python WSGI HTTP 服务器,通常位于反向代理(例如 Nginx)或负载均衡器(例如 AWS ELB)和 Web 应用程序(例如 Django 或 Flask)之间。好文章:medium.com/building-the-system/… 查看更多信息 - serverfault.com/a/331263/564406 还有这个 - vsupalov.com/gunicorn-and-nginx 【参考方案1】:

我想你可能会感到困惑,Flask 不是一个网络服务器,它是一个框架并且需要某种网络服务器,例如 Gunicorn、Nginx 或 Apache,来接受它的 HTTP 请求。然后将进行操作。人们一起运行 Nginx 和 Gunicorn 的原因是,除了作为 Web 服务器之外,Nginx 还可以代理与 Gunicorn 的连接,这带来了一定的性能优势,这里有一个很好的答案,详细说明了这些优势: https://serverfault.com/questions/220046/why-is-setting-nginx-as-a-reverse-proxy-a-good-idea

编辑: 添加了链接,其中包含有关将 Nginx 作为代理运行的性能优势的信息。

【讨论】:

如果 Flask 本身不是 Web 服务器,它是否附带一些基本的 Web 服务器,以便我们可以启动它并通过 HTTP(默认端口 5000)访问它,docs?虽然一开始他们提到“flask 对象实现了一个 WSGI 应用程序”,但是 WSGI 应用程序可以直接和可选地通过来自 Web 服务器的代理传递来与 HTTP 通信吗? This 谈论 WSGI 服务器... 啊哈,Deployment Options 他们提到“您可以在开发过程中使用内置服务器,但您应该为生产应用程序使用完整的部署选项”。 是的,flask 默认使用 Werkzeug wsgi 服务器,虽然效率不如 Gunicorn 服务器,但它很容易成为一个很好的测试和登台服务器。 这个答案仍然在搜索中出现,所以这里是来自 NikoNyrh 评论的更新 Deployment Options 链接。

以上是关于使用 Gunicorn + Nginx + Flask 有啥好处? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gunicorn 和 nginx 部署 Django 项目

尝试在 Docker 上使用 NGINX + Gunicorn 时 NGINX 给出 502 Bad Gateway

使用 nginx 和 gunicorn 运行多个 django 项目

Django 不使用 NGINX + GUNICORN 提供静态文件

使用 Nginx、Gunicorn 和 Supervisor 部署 Django

使用 nginx 和 gunicorn 运行烧瓶应用程序