正确解决启用CloudFlare SSL后导致的循环重定向

现在很多网站都会使用CDN来加速,最近一个网站使用CloudFlare CDN ,并启用SSL时,访问出现了无限循环301跳转,而访问源站是正常的。

  1. CloudFlare 启用 SSL

    CloudFlare SSL 管理都在控制台 – Crypto 处,其实默认情况下,一接入 CloudFlare CDN 就启用了 SSL,这里说说需要注意的几个地方。

    SSL

    默认情况下,CloudFlare 启用的 SSL 模式是 Flexible,还有三个选项是 Off、Full、Full(strict):

    那么这几个有什么区别呢?这里以几张图形象地阐释:

    正确解决启用CloudFlare SSL后导致的循环重定向
    正确解决启用CloudFlare SSL后导致的循环重定向
    正确解决启用CloudFlare SSL后导致的循环重定向
    正确解决启用CloudFlare SSL后导致的循环重定向
  2. 2

    用户端到 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) 即可。

  3. 3

    总结:当服务端启用 HTTPS 时,一般都会再强制 HTTP 跳转 HTTPS,而 CloudFlare 默认启用的 SSL 策略是 Flexible。也就是说,当用户访问时,对于用户看到是 HTTPS,但对于服务器来说,访问方式却是 HTTP,所以服务器返回的状态都是 301。解决方法也很简单,将 SSL 策略设为 Full 或者 Full(strict) 即可。