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

时间:2019-07-19 05:05:30

标签: python nginx flask server gunicorn

我在Internet上发现的文章很少,讨论的是将诸如“ Nginx”之类的重型Web服务器集成到Flask应用程序中,但是与Nginx一起,它们也在“ Gunicorn” Web服务器的帮助下。 / p>

我的问题是,为什么必须与uWSGI或Nginx一起使用“ Gunicorn” Web服务器?

2 个答案:

答案 0 :(得分:0)

您可以通过连接到Nginx来关注这些博客进行部署

不使用Gunicorn,使用uwsgi会使过程变得复杂

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04

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服务器?我可以在cmd中运行我的Flask应用程序,不是吗?

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

  

[Werkzeug]开发服务器不适用于生产系统。它是专为开发目的而设计的,在高负载下性能较差。 Source: Werkzeug Documentation

这就是为什么当您尝试使用run()命令运行flask应用程序时总是显示此消息的原因。

WARNING: Do not use the development server in a production environment.

然后您将需要一台服务器进行生产。

Gunicorn,uWSGI,Twisted Web等?

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

此链接也可能有用:Flask Deploying

Nginx的作用是什么?

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时尚不兼容。可以对它进行持续集成,但是这种情况很少见。这将需要更多知识:蓝色/绿色环境等。