我有一个在本地作为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中间件,我是即使在重新启动服务器并清除所有缓存后仍然存在相同的问题:
CherryPy是否可能需要任何其他配置选项?