如何解决Flask开发服务器WSGI配置
在生产中,我的flask应用程序不是在域根目录上运行,而是在https:// domain:port / app上运行。 HAproxy会处理此问题并终止SSL。我想使用flask开发服务器执行相同的操作,但是url_for
和redirect
遇到问题。也就是说,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。