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

2024-11-22 08:47:00
admin
原创
191
摘要:问题描述:使用 uWSGI 和 Nginx 设置 Flask 可能很困难。我尝试按照DigitalOcean 教程操作,但仍然遇到了问题。即使使用构建脚本也需要时间,而且我需要编写说明以便下次遵循。如果我预计流量不会很大,或者应用程序是私有的,那么在没有 uWSGI 的情况下运行它是否有意义?Flask 可以...

问题描述:

使用 uWSGI 和 Nginx 设置 Flask 可能很困难。我尝试按照DigitalOcean 教程操作,但仍然遇到了问题。即使使用构建脚本也需要时间,而且我需要编写说明以便下次遵循。

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

不使用 Nginx,只在端口上运行裸 Flask 应用程序是否有意义?


解决方案 1:

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

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

在转移到生产环境时,使用可以用于生产的 WSGI 服务器(例如 Gunicorn 或 uWSGI)替换 Werkzeug 开发服务器,无论应用程序在何处可用。


对于“我应该使用 Web 服务器吗”这个问题,答案是类似的。WSGI 服务器恰好有 HTTP 服务器,但它们不如专用的生产 HTTP 服务器(Nginx、Apache 等)好。


Flask记录了如何以各种方式进行部署。许多托管服务提供商还提供有关部署 Python 或 Flask 的文档。

解决方案 2:

首先创建应用程序:

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_server.serve_forever(),调用app_server.stop()何时退出应用程序。

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

解决方案 3:

您肯定需要类似 Gunicorn 这样的生产 WSGI 服务器,因为 Flask 的开发服务器旨在简化开发,无需进行太多配置进行微调和优化。例如,Gunicorn 具有多种配置,具体取决于您要解决的用例。但是开发 Flask 服务器没有这些功能。此外,当您尝试扩展和处理更多请求时,这些开发服务器就会显示出它们的局限性。

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

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3983  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2747  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   82  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   90  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   79  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用