【问题标题】:What is the use of a web server in flask deployments? [duplicate]在烧瓶部署中使用 Web 服务器有什么用? [复制]
【发布时间】:2018-02-11 23:18:12
【问题描述】:

注意:该问题已作为重复关闭,但它不是(两个问题都没有)。 我专门描述了一个在 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()

当我想将其移至生产环境时,我使用geventper 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应用的性能/稳定性有实际影响。

我知道网络服务器的各种用途(身份验证、反向代理、白名单、重写、负载管理等)。我的问题特别是关于网络服务器为 flask WSGI 应用程序(如果有的话)提供了什么。

【问题讨论】:

  • 使用 Flask,您可以构建您的 Web 应用程序。 WSGI 是应用程序遵循的由 WSGI 服务器托管的接口。 gevent 是一个可以托管您的应用程序的 WSGI 服务器。通常,您会在其前面放置一个完整的 Web 服务器(nginx 或 apache)作为 反向代理,以获得现代 Web 服务器提供的全部功能,而无需中间 WSGI 服务器自己提供这些功能.这让一切变得更简单、更容易推理。
  • @poke:获得现代 Web 服务器提供的全部功能,而无需中间 WSGI 服务器自己提供这些功能。 你指的是我的一些功能吗?问题中提到?换句话说,如果我希望我的网络服务器回复Hello World(当然是它所在的服务器的容量 - 但如果没有使用速率限制或类似的东西,网络服务器不会改进它)@987654329 @server 是正确的选择吗?我试图了解选择是否是二进制:dev server for dev,gevent for prod,然后可能是一些额外的
  • @poke (cont'd) ... Web 服务器的舒适特性(gevent 只是 WSGI 服务器的一个示例)
  • 开发服务器仅限于单个进程,因此不太适合生产。这就是您使用 WSGI 服务器来托管您的应用程序的原因;然后它会做任何必要的事情来正确运行你的应用程序。 WSGI 服务器仍然相当简单;您将另一台 Web 服务器作为反向代理放在前面,以访问使 Web 服务器真正强大的功能(例如负载平衡、缓存、SSL 终止)
  • @poke:好的,这很清楚(并且与我的想法一致)。如果您不介意在答案中复制/粘贴您的 cmets,我将很乐意接受。谢谢。

标签: python python-3.x flask gevent


【解决方案1】:

使用 Flask,您可以构建自己的 Web 应用程序。 WSGI 是应用程序遵循的由 WSGI 服务器托管的接口。 gevent 是一个 WSGI 服务器,可以托管您的应用程序。

通常,您会在其前面放置一个成熟的 Web 服务器(例如 nginx 或 apache)作为反向代理,以获得现代 Web 服务器通常提供的全部功能,而无需中间 WSGI 服务器自己提供这些功能.这使得一切变得更简单、更容易推理,因为每个组件都可以专注于它最擅长的事情(WSGI 服务器的工作是托管您的应用程序)。

Flask 附带的开发服务器是一个非常简单的服务器,在单个进程中运行。它为此使用werkzeug,还明确提到它不应该用于生产:

开发服务器不适用于生产系统。它专为开发目的而设计,在高负载下表现不佳。有关部署设置,请查看 Application Deployment 页面。

因此,您使用“真正的”WSGI 服务器来托管您的应用程序;然后它会做任何必要的事情来正确运行你的应用程序。 WSGI 服务器仍然相当简单;您将另一台 Web 服务器作为反向代理放在前面,以访问使 Web 服务器真正强大的功能(例如负载平衡、缓存、SSL 终止……)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多