我有一个在EC2实例上运行的flask应用程序,它位于一个终止SSL的AWS ELB后面。然后,ELB将连接转发到端口80上的实例。
我正在尝试强制flask将所有http请求重定向到https。我已经尝试了SSLify和下面的代码,问题是当我使用下面的代码时,我收到了很多重定向错误。我相信这是因为ELB正在转发到80上的实例,然后重定向将其发送回ELB,从而创建无限循环。SSLify似乎不起作用,因为实例不是SSL终结点。
看起来我需要实现request.is_secure才能使其工作,并尊重X转发协议,但我不确定如何实现。
@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)
发布于 2018-06-25 17:54:34
实现proxyfix已解决此问题。
from werkzeug.contrib.fixers import ProxyFix
sslify = SSLify(app, subdomains=True, permanent=True)
app.wsgi_app = ProxyFix(app.wsgi_app)
发布于 2022-01-05 02:01:04
理想情况下,您应该在负载均衡器上执行HTTPS重定向,而不是在->内部执行。
请参阅:Redirecting EC2 Elastic Load Balancer from HTTP to HTTPS
https://stackoverflow.com/questions/51028525
复制