当我在gunicorn上运行Flask应用程序时设置app.wsgi_app = ProxyFix(app.wsgi_app)时会发生什么?

2024-05-04

我使用 Flask 构建了一个基本的 Web 应用程序,并且能够使用其本机 http 服务器从虚拟机运行它。我很快意识到,通过这种设置,请求会被阻塞(我无法对资源发出并发请求;任何新请求都会等到较早的请求完成),并决定尝试使用gunicorn来运行应用程序来解决这个问题。我跟着文档 http://flask.pocoo.org/docs/deploying/wsgi-standalone/,特别是用这一行运行:

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app 

然而,这样做却无法启动,并抱怨没有 WSGI 应用程序。上网查了一下,发现很多人都贴出了这样的例子:

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)

我添加了这一点,它解决了我的问题。我很困惑,因为这显然是为了解决 HTTP 代理后面的服务问题,但是添加 Gunicorn 会强加 HTTP 代理吗?或者我总是在代理后面,而这对于 Flask 的内置服务器来说并不重要?

Also, Werkzeug 有关 Fixers 的文档 http://werkzeug.pocoo.org/docs/contrib/fixers/警告“出于安全原因,请勿在非代理设置中使用此中间件。”考虑到修复显然是必要的,我可以假设我正在设置代理吗?


聚会有点晚了,但是这里(烧瓶 v1) https://web.archive.org/web/20201112004914/https://flask.palletsprojects.com/en/1.0.x/deploying/wsgi-standalone/#proxy-setups是文档中有关 ProxyFix 的内容。

v2 的文档 https://flask.palletsprojects.com/en/2.3.x/deploying/proxy_fix/

换句话来说:在 HTTP 代理后面使用 Gunicorn 部署服务器,您将需要重写一些标头,以便应用程序可以工作。 Werkzeug 附带了一个修复程序,可以解决一些常见的设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我在gunicorn上运行Flask应用程序时设置app.wsgi_app = ProxyFix(app.wsgi_app)时会发生什么? 的相关文章