Cloudflare提供的服务
Cloudflare (CF) 提供了免费的CDN服务,也就是将你网站的内容缓存到CF的分布式服务器中,当你访问自己的域名时,其实是访问CF的服务器,类似于一个反向代理服务器。
所以,配置网站的https服务需要配置两段访问,即:浏览器对CF服务器的访问,CF对网站本来服务器的访问。
服务器端SSL配置
服务器端我一开始使用了acme.sh来申请SSL证书,并且在nginx中设置强制访问https。
server {
listen 80;
server_name blog.euruson.com;
rewrite ^(.*) https://$server_name$1 permanent; #http 跳转 https
}
但是设置完成后访问网站,提示重定向次数太多。其实这是因为Cloudflare端的SSL配置出现了错误。
Cloudflare端SSL配置
Cloudflare SSL 管理都在控制台 - Crypto 处,SSL选项中一共有4个选项:Off,Flexible,Full,Full(strict)。这四个选项的说明在Help中写得还是蛮详细的。
- Off:禁止访客通过HTTPS 访问你的网站,HTTPS会被重定向到HTTP。
- Flexible:访客访问CF服务器时使用HTTPS,CF服务器从网站本来服务器拉取内容时通过HTTP访问。
- Full:访客访问CF服务器时使用HTTPS,CF服务器从网站本来服务器拉取内容时通过HTTPS访问,但是不会检验证书是否有效(比如说过期证书,自签名证书,或者干脆没有证书只提供HTTPS服务)。
- Full(strict):访客访问CF服务器时使用HTTPS,CF服务器从网站本来服务器拉取内容时通过HTTPS访问,证书必须使用有效的可信任证书。
Cloudflare的初始SSL设置是Flexible,也就是说CF的服务器一直在通过HTTP访问网站本来的服务器,所以出现了无限301跳转。那么我们将SSL设置为Full或者Full(strict)即可解决问题。
相信大家也发现了,最终出现在浏览器中的证书其实是Cloudflare的证书,也就是说我们配置在服务器端的SSL证书并没有什么太大的用处,而且我们自己还要定时续签。所以之后我直接使用了Cloudflare颁发的Origin Certificates证书,证书有效期有15年之久,但是这个证书只对网站服务器和CF服务器之间的加密有效,然而这并不影响网站的访问。
Cloudflare缓存清理
使用Cloudflare时,在对网站进行更新后,无论如何刷新网站都显示不出新的效果,这是因为Cloudflare的缓存导致的。暂时还不太清楚Cloudflare的缓存机制,但是在Cloudflare的控制台可以清除缓存。同时还有开发模式,能够实时观察变化。
参考: