告诉 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
)
请记住,仅当您位于代理后面时才应用此中间件,并设置设置每个头的正确代理数量。如果此配置错误,则可能存在安全问题。