gpt4 book ai didi

python - 如何在 Flask 应用程序中获取代理方案?

转载 作者:行者123 更新时间:2023-12-05 07:04:20 26 4
gpt4 key购买 nike

我有一个在 NGINX 反向代理后面运行的 Flask 应用程序。在我的一个函数中,我需要构建一个指向不同服务的 URL,并且我希望将 HTTP 方案与 NGINX 入口方案相匹配。因此,如果 NGINX 正在反向代理 https 请求,我想生成一个类似 https://my_other_service 的 url。但是如果 NGINX 反向代理 http 我希望它是 http://my_other_service

flask.url_for 函数能够在我将它用于同一个应用程序中的端点时自动确定代理方案,所以我认为这一定是可能的,但在我的例子中我是生成不是当前 Flask 应用程序中的端点。

如何确定 Flask 应用程序中的代理方案?

最佳答案

作为described on this question ,您可以直接告诉 url_for 在生成 URL 时使用特定的方案:

url_for('secure_thingy',
_external=True,
_scheme='https',
viewarg1=1, ...)

当然,问题是您不一定知道 URL 是否应该是 https。如果它在生产中运行在 Nginx 之后,它必须是 https。如果它在本地主机上运行以进行本地开发,则 https 可能无法正常工作。

一个解决方案是为您的应用程序配置一个关于使用什么方案的配置设置。在您的开发环境中,它将设置为 http。在您的生产环境中,您将使用 https。这就是我会做的。

另一种方法是告诉 Nginx 传递一个特殊的 header ,然后您可以使用它来更改方案。

instructions on adding headers on the Nginx site , 所以这里有一个例子:

location /some/path/ {
proxy_set_header X-Force-Https "yes";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8000;
}

然后在你的 Flask 代码中,如果 request.headers.get('X-Force-Https',无)== '是'

这是一个更自动化的解决方案,但需要您修改生产网络服务器环境。

关于python - 如何在 Flask 应用程序中获取代理方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62944260/

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