Flask开发服务器WSGI配置

问题描述

在生产中,我的flask应用程序不是在域根目录上运行,而是在https:// domain:port / app上运行。 HAproxy会处理此问题并终止SSL。我想使用flask开发服务器执行相同的操作,但是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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...