Flask开发服务器WSGI配置

Flask development server WSGI configuration

在生产环境中,我的 Flask 应用程序不在域根目录 运行,而是在 https://domain:port/app。 HAproxy 处理这个并终止 SSL。我想使用烧瓶开发服务器做同样的事情,但是 url_forredirect 有问题。也就是说,url_for 排除了 /app 并且 redirect(url_for(...)) 最终重定向到 http。

我知道在生产中,uWSGI 配置将 SCRIPT_NAME 设置为 /app 以使 url_for 正确运行。我相信它也可以将 wsgi.url_scheme 设置为 https,但我不确定。

运行连接开发服务器时,有什么方法可以设置 WSGI 配置吗?我见过的所有解决方案都涉及自定义中间件或 ProxyFix 之类的东西,但随后我必须进行某种 if 切换以确定是否应用这些修复,因为它们是不必要的并且会中断生产。我希望有一种方法可以通过命令行调用 flask run 使用环境变量配置 WSGI 环境,以便开发和生产都使用相同的代码路径。

提前致谢!

最终编写了自定义中间件来完成这项工作。 __init__.py:

class DevelopmentProxyFix():
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SCRIPT_NAME'] = '/app'
        environ['wsgi.url_scheme'] = 'https'
        return self.app(environ, start_response)

def create_app():
    app = Flask(__name__)
    ...
    if app.config['ENV'] == "development":
        app.wsgi_app = DevelopmentProxyFix(app.wsgi_app)
    ...
    return app