今天遇到一个问题,如果开启 Cloud­Flare 代理则会导致重定向次数过多

CloudFlare 造成重定向的次数过多的原因

当网站开启了 Cloud­Flare 服务,用户访问我们的网站时,其实访问的离用户比较近的 Cloud­flare 服务器,Cloud­flare 再代理用户请求我们的源服务器,以达到加速和保护源服务器的目的。Cloud­flare 代理用户请求我们源服务器获取网页资源的过程叫回源。

Cloud­flare 造成循环重定向的错误就出在了回源的过程中,造成这种错误的原因就是 http 和 https 之间的重定向。

Cloud­Flare 中 SSL 有四个可选选项(第一个普通用户不能选)

image
image

如果选择关闭,则是通过 http 访问网站

如果选择灵活,则是 Cloud­Flare 通过 Http 回源

SSL 中设置了 灵活,CDN 以 HTTP 协议回源网站。
源网站支持 HTTPS,并且设置了通过 HTTP 协议访问时,自动跳转到 HTTPS 协议。
到这里,可能就有朋友发现问题了,我们访问 Cloud­flare 的 CDN 服务器的时候,是通过 HTTPS 访问的,CDN 访问源网站的时候,是通过 HTTP 访问的,源网站上 HTTP 又自动跳转了 HTTPS,完美的一个循环重定向。重定向的次数多了,浏览器就撂挑子报出了 ER­R_­TOO_­MANY_REDI­RECTS 的错误。

解决办法

有两种解决方法

一种是在源站只提供 http 访问,关闭 http 自动重定向 https

还有一种就是在 Cloud­Flare 中 SSL 选择完全或者完全(严格),强制要求 Cloud­Flare 通过 Https 回源