我们可以将 Flask 应用程序直接连接到 Nginx 服务器吗?

0 python nginx flask gunicorn server

我在互联网上找到的文章很少,讨论像“Nginx”这样的重型 Web 服务器与 Flask 应用程序的集成,但与 Nginx 一起,他们也在借助“Gunicorn”Web 服务器。

我的问题是,为什么需要将“Gunicorn”网络服务器与 uWSGI 或 Nginx 一起使用?

小智 5

您需要了解什么是Web 服务器网关接口(WSGI),才能了解 Gunicorn、uWSGI 和 Nginx 之间的区别。

这是什么意思?

[WSGI 是] Web 服务器和 Python Web 应用程序或框架之间的拟议标准接口,以促进 Web 应用程序跨各种 Web 服务器的可移植性。资料来源:PEP 333

如上所述,它是一种标准化,可简化服务器内 Python 中 Web 应用程序的实现。WSGI 描述了服务器和 python 应用程序之间必须如何交互。无论您的应用程序是什么,如果您遵循PEP 333 中定义的规则,那么任何与 WSGI 兼容的 HTTP 服务器都能够与您的应用程序通信。

但是重新发明轮子是没有意义的,开发人员已经创建了 WSGI 应用程序,以便您可以更轻松地创建应用程序。Flask 是其中之一,但还有其他一些。

为什么我需要 WSGI HTTP 服务器?我可以在 cmd 中运行我的 Flask 应用程序,不是吗?

你总是需要一个 WSGI HTTP 服务器。Flask 是一个非常好的工具,它直接包含一个 Werkzeug 开发服务器,但您不能在生产中使用 Werkzeug 服务器。

[Werkzeug] 开发服务器不打算用于生产系统。它专为开发目的而设计,在高负载下表现不佳。来源:Werkzeug 文档

这就是为什么当您尝试使用命令 run() 运行您的 Flask 应用程序时,您总是会收到此消息。

WARNING: Do not use the development server in a production environment.
Run Code Online (Sandbox Code Playgroud)

然后,您将需要一台用于生产的服务器。

Gunicorn、uWSGI、Twisted Web 等?

有许多与 WSGI 兼容的服务器可用。选择完全是任意的,完全取决于您的需求。安装和配置可以不同。将有更多或更少的选项可用。由您决定哪一种最适合您。Flask 文档中有一部分是为此保留的:独立 WSGI 容器

此链接也很有用:Flask Deploying

Nginx 的作用是什么?

Nginx 可以用作反向代理

反向代理是一种中间代理服务,它接受客户端请求,将其传递给一个或多个服务器,然后将服务器的响应传递给客户端。来源:设置 Nginx 反向代理

走得更远

使用 Nginx + WSGI 服务器有什么好处?CI/CD

在 WSGI 服务器中dockerize一个 Nginx 服务器和你的应用程序真的很容易。然后,您可以使用 Kubernetes 管理您的 docker,并管理与 Jenkins 的持续集成。DevOps 文化。

但是,这绝对不是强制性的。一个很好用的解决方案是Nginx Unit,它允许你拥有 Nginx 的强大功能,并与 Gunicorn 或 uWSGI 分开。此解决方案中可能存在的缺陷是它与您可以在 Google 上轻松找到的 Docker + Kubernetes + Jenkins 方式不兼容。很可能对其进行持续集成,但不太常见。这将需要更多的知识:蓝色/绿色环境等......