小智 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 服务器。Flask 是一个非常好的工具,它直接包含一个 Werkzeug 开发服务器,但您不能在生产中使用 Werkzeug 服务器。
[Werkzeug] 开发服务器不打算用于生产系统。它专为开发目的而设计,在高负载下表现不佳。来源:Werkzeug 文档
这就是为什么当您尝试使用命令 run() 运行您的 Flask 应用程序时,您总是会收到此消息。
WARNING: Do not use the development server in a production environment.
Run Code Online (Sandbox Code Playgroud)
然后,您将需要一台用于生产的服务器。
有许多与 WSGI 兼容的服务器可用。选择完全是任意的,完全取决于您的需求。安装和配置可以不同。将有更多或更少的选项可用。由您决定哪一种最适合您。Flask 文档中有一部分是为此保留的:独立 WSGI 容器。
此链接也很有用:Flask Deploying
Nginx 可以用作反向代理。
反向代理是一种中间代理服务,它接受客户端请求,将其传递给一个或多个服务器,然后将服务器的响应传递给客户端。来源:设置 Nginx 反向代理
使用 Nginx + WSGI 服务器有什么好处?CI/CD。
在 WSGI 服务器中dockerize一个 Nginx 服务器和你的应用程序真的很容易。然后,您可以使用 Kubernetes 管理您的 docker,并管理与 Jenkins 的持续集成。DevOps 文化。
但是,这绝对不是强制性的。一个很好用的解决方案是Nginx Unit,它允许你拥有 Nginx 的强大功能,并与 Gunicorn 或 uWSGI 分开。此解决方案中可能存在的缺陷是它与您可以在 Google 上轻松找到的 Docker + Kubernetes + Jenkins 方式不兼容。很可能对其进行持续集成,但不太常见。这将需要更多的知识:蓝色/绿色环境等......
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |