我在Internet上发现的文章很少,讨论的是将诸如“ Nginx”之类的重型Web服务器集成到Flask应用程序中,但是与Nginx一起,它们也在“ Gunicorn” Web服务器的帮助下。 / p>
我的问题是,为什么必须与uWSGI或Nginx一起使用“ Gunicorn” Web服务器?
答案 0 :(得分:0)
您可以通过连接到Nginx来关注这些博客进行部署
不使用Gunicorn,使用uwsgi会使过程变得复杂
https://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/
答案 1 :(得分:0)
您需要了解什么是 Web服务器网关接口(WSGI),以了解Gunicorn,uWSGI和Nginx之间的区别。
[WSGI是] Web服务器和Python Web应用程序或框架之间的建议标准接口,以促进Web应用程序在各种Web服务器之间的可移植性。 Source: PEP 333
如上所述,它是一种标准化的方法,可简化服务器内python中Web应用程序的实现。 WSGI描述了服务器和python应用程序之间必须如何进行交互。无论您的应用程序是什么,只要遵循PEP 333中定义的规则,那么任何与WSGI兼容的HTTP服务器都将能够与您的应用程序进行通信。
但是重新发明轮子没有意义,开发人员已经创建了WSGI应用程序,因此您可以更轻松地创建应用程序。烧瓶是其中之一,但是还有其他。
您始终需要WSGI HTTP服务器。 Flask是一个非常好的工具,它直接包含一个Werkzeug开发服务器,但是您绝对不能在生产中使用Werkzeug服务器。
[Werkzeug]开发服务器不适用于生产系统。它是专为开发目的而设计的,在高负载下性能较差。 Source: Werkzeug Documentation
这就是为什么当您尝试使用run()命令运行flask应用程序时总是显示此消息的原因。
WARNING: Do not use the development server in a production environment.
然后您将需要一台服务器进行生产。
有许多与WSGI兼容的服务器。选择完全是任意的,并且完全取决于您的需求。安装和配置可以不同。或多或少的选项将可用。由您决定最适合您的是哪一个。 Flask文档中有一部分专门为此保留:Standalone WSGI Container。
此链接也可能有用:Flask Deploying
Nginx可以用作reverse proxy。
反向代理是一种中间代理服务,它接受客户端请求,将其传递给一个或多个服务器,然后将服务器的响应传递给客户端。 Source: Setting up an Nginx Reverse Proxy
使用Nginx + WSGI服务器有什么优势? CI/CD。
在WSGI服务器中 dockerize Nginx服务器和您的应用程序真的很容易。然后,您可以使用Kubernetes管理您的码头工人,并管理与Jenkins的持续集成。 DevOps文化。
但是,这绝对不是强制性的。 Nginx Unit也是一个很好用的解决方案,它使您可以拥有Nginx的功能并可以与Gunicorn或uWSGI分开。在该解决方案中可能发现的缺陷是,它与您可以在Google上轻松找到的Docker + Kubernetes + Jenkins时尚不兼容。可以对它进行持续集成,但是这种情况很少见。这将需要更多知识:蓝色/绿色环境等。