将 nginx 与 gunicorn 一起使用的目的是啥? [复制]
Posted
技术标签:
【中文标题】将 nginx 与 gunicorn 一起使用的目的是啥? [复制]【英文标题】:What is the purpose of using nginx with gunicorn? [duplicate]将 nginx 与 gunicorn 一起使用的目的是什么? [复制] 【发布时间】:2017-08-20 01:22:49 【问题描述】:我想将 gunicorn 用于带有 Flask/Python 的 REST API 应用程序。在这里添加nginx到gunicorn的目的是什么? gunicorn 网站推荐使用 gunicorn 和 nginx。
【问题讨论】:
我也有同样的问题。答案似乎是围绕着“前置”和“反向代理”等术语。这些是我理解得很好的术语。我的兴趣(无论它是否与 OP 内联......)究竟是 Gunicorn 不能做或 Nginx 能做的好?它只是有效地提供静态文件吗? Gunicorn 是一个 Python 程序的“应用服务器”,而 nginx 是一个相当优化的 Web 服务器(具有许多功能和相当复杂的配置选项),这完全是 gunicorn 的初衷。有效地提供静态文件就是其中之一。我亲身经历过 gunicorn 不能做的一件事是它对 socketio 转发的处理很差。这就是为什么我首先需要使用 nginx。好吧,为了进行更多比较,您最好查看 gunicorn 和 nginx 的功能列表。 【参考方案1】:Nginx 有一些 gunicorn 没有的 Web 服务器功能(例如,提供静态页面;SSL 处理),而 gunicorn 实现了 WSGI(nginx 没有)。
...等等,为什么我们需要两台服务器?将 Gunicorn 视为 将在 nginx 后面运行的应用程序 Web 服务器——前端 面向网络服务器。 Gunicorn 与 WSGI 兼容。它可以与其他人交谈 支持 WSGI 的应用程序,例如 Flask 或 Django。
来源:https://realpython.com/blog/python/kickstarting-flask-on-ubuntu-setup-and-deployment/
【讨论】:
NGINX 和 Apache 无法直接与基于 Python 的 Web 应用程序通信,这就是为什么我们需要网关接口来解释和处理对 Python 的请求。我们有不同网关的 Mod_WSGI、uWSGI 和 Gunicorn。 Apache 或 NGINX 收到第一个请求,然后是网关到 python 应用程序,反之亦然。【参考方案2】:Nginx 是 Gunicorn 的反向代理。 Gunicorn 为您的 Flask 应用程序提供服务,而 Nginx 位于它前面并决定请求的去向。例如,如果传入的请求是 http 请求,Nginx 会将其重定向到 gunicorn,如果是针对静态文件,则它自己服务。从here 开始阅读更多关于如何使用 Nginx 和 Gunicorn 以及如何部署它们的信息。
【讨论】:
【参考方案3】:Gunicorn 是一个用于运行您的 python 应用程序实例的应用服务器。
NGINX 是一个反向代理。它接受传入的连接并决定它们下一步应该去哪里。它在 Gunicorn 的前面。
【讨论】:
【参考方案4】:Nginx 是您服务器的前端。 Gunicorn 运行多个 django 项目(每个项目都是一个 wsgi 由 Gunicorn 提供支持的应用程序)在单个服务器(例如 Ubuntu)中。你知道为什么 Django 的吉祥物是一匹小马吗?故事是 Django 有很多你想要的东西:一个 ORM,各种中间件, 管理网站……“你还想要什么,小马?”好吧,独角兽 代表“绿色独角兽”-服从thetestinggoat.com
每个请求都到 nginx 并询问哪个 gunicorn 应用程序 它应该去并重定向它。
注意 - Gunicorn 不能像本地 django 服务器那样自动提供静态文件。因此,您将再次需要 nginx。
【讨论】:
【参考方案5】:在生产环境中,nginx 充当反向代理。这意味着用户将从浏览器中点击 nginx,然后 nginx 会将调用转发到您的应用程序。 希望这会有所帮助。
【讨论】:
以上是关于将 nginx 与 gunicorn 一起使用的目的是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Traefik 时如何使用 Nginx 和 Django Gunicorn 提供静态内容
Docker Image与uWSGI / Gunicorn + Nginx for CentOS中的Flask应用程序
https://example.com/admin 在 Django Nginx 和 gunicorn 中重定向到 https://admin
Apache + mod_wsgi 与 nginx + gunicorn