Flask部署到HTTPS服务器中出现的小问题
网站启用HTTPS后,部署在服务器的Flask应用在访问特定页面时发生异常跳转,总是被重定向至首页
· · ·因为我的网站使用了https,当flask部署到服务器时重定向时出现了问题,在访问某个页面的时候总是会被重定向到网站的首页,然而我本地的环境却没有出现此类问题。经过一步步的排查,最后发现是flask重定向到http页面,nginx将所有http请求全部重定向到https首页造成的。
我采用的是比较常见的方案,用nginx代理gunicorn。也就是说nginx会将所有的外部请求转到gunicorn所对应的端口,但是gunicorn并不知道外部请求是https还是http。所以导致每次重定向到默认的http页面。
解决的方法有很多种,但是最简单,不需要大费干戈修改代码的方法就是修改nginx的配置文件。在location里添加如下代码:
proxy_set_header X-Forwarded-Proto $scheme;
X-Forwarded-Proto (XFP) 是一个事实上的标准首部,用来确定客户端与代理服务器或者负载均衡服务器之间的连接所采用的传输协议(HTTP 或 HTTPS)。在服务器的访问日志中记录的是负载均衡服务器与服务器之间的连接所使用的传输协议,而非客户端与负载均衡服务器之间所使用的协议。为了确定客户端与负载均衡服务器之间所使用的协议, X-Forwarded-Proto 就派上了用场。
至此所有问题解决,大功告成啦!
完