Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为Flask应用提供服务是否需要WSGI服务器和HTTP服务器?_Python_Nginx_Flask_Uwsgi - Fatal编程技术网

Python 为Flask应用提供服务是否需要WSGI服务器和HTTP服务器?

Python 为Flask应用提供服务是否需要WSGI服务器和HTTP服务器?,python,nginx,flask,uwsgi,Python,Nginx,Flask,Uwsgi,使用uWSGI和Nginx设置烧瓶可能很困难。我试着跟随,但仍然有困难。即使使用构建脚本也需要时间,我需要编写下一次要遵循的指令 如果我不期望流量很大,或者应用程序是私有的,那么在没有uWSGI的情况下运行它有意义吗?Flask可以监听端口。Nginx可以转发请求吗 也不使用Nginx,只是在端口上运行裸烧瓶应用程序,这有意义吗?当您“运行烧瓶”时,实际上是在运行Werkzeug的开发WSGI服务器,并将您的烧瓶应用程序作为WSGI可调用程序传递 开发服务器不适用于生产环境。它不是为了特别高效、

使用uWSGI和Nginx设置烧瓶可能很困难。我试着跟随,但仍然有困难。即使使用构建脚本也需要时间,我需要编写下一次要遵循的指令

如果我不期望流量很大,或者应用程序是私有的,那么在没有uWSGI的情况下运行它有意义吗?Flask可以监听端口。Nginx可以转发请求吗

也不使用Nginx,只是在端口上运行裸烧瓶应用程序,这有意义吗?

当您“运行烧瓶”时,实际上是在运行Werkzeug的开发WSGI服务器,并将您的烧瓶应用程序作为WSGI可调用程序传递

开发服务器不适用于生产环境。它不是为了特别高效、稳定或安全而设计的。它不支持HTTP服务器的所有可能功能

在转入生产时,无论应用程序在哪里可用,都应使用生产就绪的WSGI服务器(如Gunicorn或uWSGI)替换Werkzeug开发服务器


答案与“我是否应该使用web服务器”类似。WSGI服务器碰巧有HTTP服务器,但它们不如专用的生产HTTP服务器(Nginx、Apache等)好


如何以各种方式部署。许多主机提供商也有关于部署Python或Flask的文档。

首先创建应用程序:

import flask

app = flask.Flask(__name__)
然后设置路线,然后在您想要启动应用程序时:

import gevent.pywsgi

app_server = gevent.pywsgi.WSGIServer((host, port), app)
app_server.serve_forever()
调用此脚本来运行应用程序,而不必告诉gunicorn或uWSGI运行它

我希望使用Flask来构建web应用程序,但在与其他元素组合时遇到了困难。我最终发现
gevent.pywsgi.WSGIServer
正是我所需要的。调用
app\u server.serve\u forever()
后,在退出应用程序时调用
app\u server.stop()


在我的部署中,我的应用程序正在使用Flask和gevent监听
localhost:port
,然后我让Nginx反向代理HTTPS请求到它。

您肯定需要像Gunicorn这样的生产WSGI服务器,因为Flask的开发服务器旨在简化开发,而无需进行很多微调和优化配置。 根据您试图解决的用例,Gunicorn有一个解决方案。但是开发服务器没有这些功能。此外,一旦您尝试扩展和处理更多请求,这些开发服务器就会显示出它们的局限性

至于需要像Nginx这样的反向代理服务器,这取决于您的用例。 如果您是在AWS中最新的负载平衡器(例如,非经典负载平衡器)后面部署应用程序,那么它本身就足以满足大多数用例。如果您有此选项,则无需努力设置NGINX

反向代理的目的是处理速度慢的客户端,即需要时间发送请求的客户端。这些反向负载平衡器缓冲请求,直到从客户端获得整个请求,并将它们异步发送到Gunicorn。这大大提高了应用程序的性能