你错过了ProxyFix()中间件组件 https://werkzeug.palletsprojects.com/middleware/proxy_fix/#module-werkzeug.middleware.proxy_fix。查看烧瓶代理设置文档 https://flask.palletsprojects.com/deploying/proxy_fix/.
不需要子类化任何东西;只需将此中间件组件添加到您的 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 及更高版本已经使用该版本)。
该组件从 X-Forwarded-Proto 标头设置 WSGI 方案 https://github.com/pallets/werkzeug/blob/129b3fa0041b874951ce89cbc0a7a6d6e8944414/src/werkzeug/middleware/proxy_fix.py#L165-L228。请阅读我上面链接到的 Flask 文档,了解如何信任标头以及根据您的具体情况自定义中间件。上面,我将其配置为仅查看X-Forwarded-Proto
,但该组件可以处理其他X-Forwarded-*
配置也一样。
默认是信任一个级别X-Forwarded-For
, add x_for=0
如果您想禁用此功能,请添加到关键字参数。
另请注意,ProxyFix
中间件在 Werkzeug 0.15 中得到了相当大的扩展;此外X-Forwarded-Proto
, -For
, and -Host
, the X-Forwarded-Port
and -Prefix
还参考标头,所有标头都支持多个值。