告诉 Flask 它位于代理服务器之后

当使用反向代理,或者许多 Python 托管平台时,代理将拦截所有外部请求并转发到本地 WSGI 服务器。

从 WSGI 服务器和 Flask 应用程序的角度来看,请求现在来自 HTTP 服务器到本地地址,而不是从远程地址到外部服务器地址。

HTTP 服务器应该设置 X-Forwarded- 标头,以便将真实值传递给应用程序。然后,可以通过使用 Werkzeug 提供的 X-Forwarded-For Proxy Fix 中间件包装应用程序来告知应用程序信任并使用这些值。

只有当应用程序实际上位于代理服务器之后时,才应使用此中间件,并且应配置在其前面链接的代理服务器的数量。并非所有代理服务器都设置所有标头。由于传入的标头可能是伪造的,因此您必须设置有多少代理服务器正在设置每个标头,以便中间件知道信任什么。

from werkzeug.middleware.proxy_fix import ProxyFix

app.wsgi_app = ProxyFix(
    app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1
)

请记住,只有当您位于代理服务器之后时才应用此中间件,并设置设置每个标头的代理服务器的正确数量。如果您配置错误,这可能会成为安全问题。