现在很多网站都会使用CDN来加速,最近一个网站使用CloudFlare CDN ,并启用SSL时,访问出现了无限循环301跳转,而访问源站是正常的。
-
CloudFlare 启用 SSL
CloudFlare SSL 管理都在控制台 – Crypto 处,其实默认情况下,一接入 CloudFlare CDN 就启用了 SSL,这里说说需要注意的几个地方。
SSL
默认情况下,CloudFlare 启用的 SSL 模式是 Flexible,还有三个选项是 Off、Full、Full(strict):
那么这几个有什么区别呢?这里以几张图形象地阐释:
-
用户端到 CloudFlare 的访问称之为 A,CloudFlare 到服务端的访问称之为 B:
Off:全程 HTTP;
Flexible:A 使用 HTTPS,B 使用 HTTP,称为灵活加密;
Full:全程使用 HTTPS,允许 B 程服务端使用自签名证书;
Full(strict):全程使用 HTTPS,与 Full 的区别在于 B 程服务端必须使用有效的可信任证书;
现在我们再来看之前循环301重定向的主要表现:
1、访问任何页面都是重定向循环,包括任何静态文件;
2、去掉SSL访问之后正常,也就是80端口访问正常,而443端口访问https://www.lingquanzhongxin.com一定出现循环重定向。
有没有发现,Flexible是造成我们 301 反复跳转的主要原因,其解决方法也很简单,将 SSL 策略设为 Full 或者 Full(strict) 即可。
-
总结:当服务端启用 HTTPS 时,一般都会再强制 HTTP 跳转 HTTPS,而 CloudFlare 默认启用的 SSL 策略是 Flexible。也就是说,当用户访问时,对于用户看到是 HTTPS,但对于服务器来说,访问方式却是 HTTP,所以服务器返回的状态都是 301。解决方法也很简单,将 SSL 策略设为 Full 或者 Full(strict) 即可。