我有一个在EC2实例上运行的flask应用程序,它位于终止SSL的AWS ELB后面。然后,ELB将连接转发到端口80上的实例。
我正试图强制flask将所有http请求重定向到https。我已经尝试过SSLify和以下方法,问题是当我使用以下方法时,收到许多重定向错误。我相信这是因为ELB正在转发到80上的实例,然后重定向将其发送回ELB,从而创建了无限循环。由于实例不是SSL终止点,因此SSLify似乎不起作用。
看起来我需要实现request.is_secure()来完成这项工作并尊重X-Forwarded-Protocol,但是我不确定如何做到。
@app.before_request
def before_request():
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 301
return redirect(url, code=code)
答案 0 :(得分:1)
实施proxyfix已解决该问题。
from werkzeug.contrib.fixers import ProxyFix
sslify = SSLify(app, subdomains=True, permanent=True)
app.wsgi_app = ProxyFix(app.wsgi_app)