python - Flask-Gunicorn-Nginx 设置在幕后是如何工作的?

标签 python python-3.x nginx gunicorn

我想知道请求到底是如何处理的,我的意思是,我认为它是这样的:

  • Nginx接收请求,根据配置进行初始处理,传递给Gunicorn

  • Gunicorn 接收它,并使用请求数据启动 Flask 应用程序的实例

  • Flask 应用接收请求数据,并执行其编程的工作

是这样的吗? Flask 应用程序的新实例是否会根据每个请求启动?

最佳答案

不完全是。基本上flask是一个web应用程序,它在gunicorn启动时加载。

此时,Flask 应用程序已启动并正在运行,gunicorn 本身可以通过将请求发送到其 Python 进程内的 Flask 应用程序来应答请求(即,没有网络流量)。

Nginx 位于gunicorn 之上,并代理客户端和gunicorn 之间的请求,因为gunicorn 不是Web 服务器。

所以nginx -> Gunicorn -> Flask(由gunicorn自己加载)

当gunicorn启动时,它会自行加载并初始化flask应用程序。对每个请求都这样做会非常慢。

Nginx 只是代理gunicorn 的监听端口。它本身不会加载 Flask 应用程序,这实际上是一个符合 WSGI 的 Python Web 应用程序。

关于python - Flask-Gunicorn-Nginx 设置在幕后是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43941174/

相关文章:

python - 如何根据pandas数据框中的行和列分隔条目

ruby-on-rails - 更改 git 的 Remote 在 digital ocean 上不起作用

node.js - 为什么express.js应用程序几乎总是位于nginx或其他Web服务器后面?

python - 如何使用 pyqt4 将小部件添加到网格布局的中心

python - Vanilla Django 转换 ResourceWarning : "unclosed file" on logging

javascript - 包含脚本在 web.py 中不起作用

python-3.x - 在 macOS 上安装 pwntools

nginx - Go:在模板中的 if 语句中使用环境变量

python - Python和openCV数组IndexError:列表分配索引超出范围

python - python中如何定义动态二维数组?