在 Flask 部署中 Web 服务器有什么用?
What is the use of a web server in flask deployments?
注意:该问题已作为重复问题关闭,但它不是(两个问题都没有)。
我在 Web 模式下专门描述了一个应用程序,然后在 WSGI 模式下 - 我毫不怀疑何时使用哪个(两个链接的问题都解决了这一点)。我还解释说我很清楚 Web 服务器的用途。
接受的答案很好地总结了这一点,并回答了 Web 服务器是否是 运行 prod flask 应用程序的要求(不是)的问题。
我有一个 flask
应用程序。开发版本 with all its limitations 是
import flask
app = flask.Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
app.run()
当我想将其移至生产环境时,我使用 gevent
、per the deployment documentation:
import gevent.monkey
gevent.monkey.patch_all()
import flask
import gevent.wsgi
app = flask.Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
gevent.wsgi.WSGIServer(('127.0.0.1', 5000), app).serve_forever()
两种情况都有效,第一种情况偶尔会出现问题(由于其性质,这并不意外)。
然后,我在这里和那里阅读的很多信息都提到 flask
应用程序的生产部署的第三个组件是 Web 服务器(Apache、nginx)。它对启用 WSGI 的烧瓶应用程序的实际用途是什么?
具体想了解一下对flask应用的性能/稳定性是否有实际影响
我知道网络服务器的各种用途(身份验证、反向代理、白名单、重写、负载管理等等)。我的问题具体是关于网络服务器为烧瓶 WSGI 应用程序(如果有的话)提供什么 。
使用 Flask,您可以构建您的 Web 应用程序。 WSGI 是应用程序遵循的由 WSGI 服务器托管的接口。 gevent 是一个 WSGI 服务器,可以托管您的应用程序。
通常,您会在它前面放置一个完整的网络服务器(例如 nginx 或 apache)作为反向代理,以获得现代网络服务器通常提供的全部功能,而无需中间 WSGI 服务器提供这些自己的特点。这使得一切都变得更简单,更容易推理,因为每个组件都可以专注于它最擅长的事情(WSGI 服务器的工作是仅 托管您的应用程序)。
Flask 附带的开发服务器是一个非常简单的服务器,运行在单个进程中。它为此使用 werkzeug,这也明确提到它不应该用于生产:
The development server is not intended to be used on production systems. It was designed especially for development purposes and performs poorly under high load. For deployment setups have a look at the Application Deployment pages.
因此,您使用“真正的”WSGI 服务器来托管您的应用程序;然后它会做任何必要的事情 运行 你的应用程序正确。 WSGI 服务器仍然相当简单;您将另一个 Web 服务器作为反向代理放在前面,以访问使 Web 服务器真正强大的功能(例如负载平衡、缓存、SSL 终止等)。
注意:该问题已作为重复问题关闭,但它不是(两个问题都没有)。 我在 Web 模式下专门描述了一个应用程序,然后在 WSGI 模式下 - 我毫不怀疑何时使用哪个(两个链接的问题都解决了这一点)。我还解释说我很清楚 Web 服务器的用途。 接受的答案很好地总结了这一点,并回答了 Web 服务器是否是 运行 prod flask 应用程序的要求(不是)的问题。
我有一个 flask
应用程序。开发版本 with all its limitations 是
import flask
app = flask.Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
app.run()
当我想将其移至生产环境时,我使用 gevent
、per the deployment documentation:
import gevent.monkey
gevent.monkey.patch_all()
import flask
import gevent.wsgi
app = flask.Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
gevent.wsgi.WSGIServer(('127.0.0.1', 5000), app).serve_forever()
两种情况都有效,第一种情况偶尔会出现问题(由于其性质,这并不意外)。
然后,我在这里和那里阅读的很多信息都提到 flask
应用程序的生产部署的第三个组件是 Web 服务器(Apache、nginx)。它对启用 WSGI 的烧瓶应用程序的实际用途是什么?
具体想了解一下对flask应用的性能/稳定性是否有实际影响
我知道网络服务器的各种用途(身份验证、反向代理、白名单、重写、负载管理等等)。我的问题具体是关于网络服务器为烧瓶 WSGI 应用程序(如果有的话)提供什么 。
使用 Flask,您可以构建您的 Web 应用程序。 WSGI 是应用程序遵循的由 WSGI 服务器托管的接口。 gevent 是一个 WSGI 服务器,可以托管您的应用程序。
通常,您会在它前面放置一个完整的网络服务器(例如 nginx 或 apache)作为反向代理,以获得现代网络服务器通常提供的全部功能,而无需中间 WSGI 服务器提供这些自己的特点。这使得一切都变得更简单,更容易推理,因为每个组件都可以专注于它最擅长的事情(WSGI 服务器的工作是仅 托管您的应用程序)。
Flask 附带的开发服务器是一个非常简单的服务器,运行在单个进程中。它为此使用 werkzeug,这也明确提到它不应该用于生产:
The development server is not intended to be used on production systems. It was designed especially for development purposes and performs poorly under high load. For deployment setups have a look at the Application Deployment pages.
因此,您使用“真正的”WSGI 服务器来托管您的应用程序;然后它会做任何必要的事情 运行 你的应用程序正确。 WSGI 服务器仍然相当简单;您将另一个 Web 服务器作为反向代理放在前面,以访问使 Web 服务器真正强大的功能(例如负载平衡、缓存、SSL 终止等)。