Flask url_for在nginx反向代理

时间:2016-10-03 16:10:43

标签: python nginx flask reverse-proxy cherrypy

我有一个在本地作为http://localhost:5000在CherryPy上运行的Flask应用程序,然后通过Nginx反向代理公开https://some.website.com

我遇到的问题是,每次我的应用调用redirect(url_for('some.endpoint'))时,都会返回http://重定向。

通常我会使用url重写规则更正此问题,但在我的方案中这是不可能的,因为所有http端口80流量都在防火墙级别被阻止,并且服务器只接受https流量。

我现在已经能够通过在_external=True, _scheme='https'功能上添加url_for参数来欺骗我了,但是我遇到了各种问题,比如@login_required装饰器中断,因为它尝试将用户重定向到http://some.website.com/login,这会在连接被拒绝后超时。

在我设置的Flask配置对象中:

PREFERRED_URL_SCHEME = "https"

但这对此问题没有影响。

我还在nginx.conf文件中添加了以下标题:

proxy_set_header   X-Forwarded-For          $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto        https;
proxy_set_header   X-Forwarded-Ssl          on;
proxy_set_header   X-Url-Scheme             https; 

也没有效果。

是否有任何类似问题的人找到了解决方法?

编辑:我在调用werkzeig.contrib.fixers之前将flask_app.wsgi_app = ProxyFix(flask_app.wsgi_app)行添加到我的应用中,从cherrypy.engine.start()添加了ProxyFix中间件,我是即使在重新启动服务器并清除所有缓存后仍然存在相同的问题:

screenshot

CherryPy是否可能需要任何其他配置选项?

0 个答案:

没有答案