gpt4 book ai didi

python - X-Forwarded-Proto 和 Flask

转载 作者:行者123 更新时间:2023-12-02 10:05:44 25 4
gpt4 key购买 nike

我遇到了 this SO question and answer 中描述的完全相同的问题。这个问题的答案是一个很好的解决方法,但我不明白根本问题。在负载均衡器处终止 SSL 并在负载均衡器和 Web/应用服务器之间使用 HTTP 非常常见。堆栈的哪一部分不尊重 X-Forwarded-Proto?是 Werkzeug 吗? flask ? uwsgi?

就我而言,我使用的是 AWS ELB(设置 X-Forwarded-Proto)=> Nginx(沿着 X-Forwarded-Proto 转发到 uwsgi)。但在 python 应用程序中,我必须按照我上面引用的问题中的描述对 Flask Request 进行子类化。

既然这是一个如此常见的部署场景,似乎应该有更好的解决方案。我缺少什么?

最佳答案

您缺少 ProxyFix() middleware component 。请参阅 flask Proxy Setups documentation .

不需要子类化任何东西;只需将此中间件组件添加到您的 WSGI 堆栈即可:

# Werkzeug 0.15 and newer
from werkzeug.middleware.proxy_fix import ProxyFix
from flask import Flask


app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1)

如果您安装了 Flask,那么您也拥有 Werkzeug,但请务必将版本固定为 >=0.15 以获得 ProxyFix 的更新版本(Flask 1.1.0 及更高版本已使用该版本)。

该组件sets the WSGI scheme from the X-Forwarded-Proto header 。请阅读我上面链接到的 Flask 文档,了解如何信任 header 以及根据您的具体情况自定义中间件。上面,我将其配置为仅查看 X-Forwarded-Proto,但该组件也可以处理其他 X-Forwarded-* 配置。

默认情况下信任一级 X-Forwarded-For,如果您想禁用此功能,请将 x_for=0 添加到关键字参数。

另请注意,ProxyFix 中间件的功能在 Werkzeug 0.15 中得到了显着扩展;除了 X-Forwarded-Proto-For-Host 之外,X-Forwarded-Port还引用了 -Prefix header ,所有 header 都支持多个值。

关于python - X-Forwarded-Proto 和 Flask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39835928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com