我的最佳实践之Cloudflare——基于免费服务

阅读指南:

  1. 这是一篇关于Cloudflare基础的文章,比较了解的朋友可以跳过。
  2. 以下CF为Cloudflare的简称。

0. 关于Cloudflare

Cloudflare是一间美国的跨国IT企业,总部位于旧金山,在伦敦和英美外亦设有办事处。
Cloudflare以向客户提供网站安全管理、性能优化及相关的技术支持为主要业务。通过基于反向代理的内容分发网络(Content Delivery Network,CDN)及分布式域名解析服务(Distributed Domain Name Server),Cloudflare可以帮助受保护站点抵御包括拒绝服务攻击在内的大多数网络攻击,确保该网站长期在线,同时提升网站的性能、加载速度以改善访客体验。

CF你可以把它理解为一个从域名解析开始覆盖全站的安全防护与CDN服务,与国内的各种云CDN服务是类似的,只不过它做的更早且更专注于这方面。

1. Cloudflare适合你吗?

1.1. 网络性能

首先,免费版的CF没有大陆节点(与百度合作的收费定制版有大陆节点,但是必须要ICP备案)。如果你的服务器也在大陆的话,那么大陆用户访问网站的时候,加载的每个资源都会经历两次跨区域网络传输,速度感人。下面这个表格用于说明服务器和用户在不同区域时使用CF时对页面加载速度的影响

用户在海外 用户在大陆
服务器在海外 速度优秀 速度一般
服务器在大陆 速度一般 速度不好

1.2. CDN

其次,因为CF是基于域名的全站CDN。所以它的CDN系列功能特别适合静态内容较多的产品,比如说官网、博客等。对于数量庞大的动/静态内容混合性产品来说,通过精心配置也是比较适合的。如果是纯动态内容,比如说API服务,那么CDN效果就有限了。

1.3. 安全性

上面说的都是基于性能方面的考量,CF在安全性方面也有非常大的作用。比如说所有流量通过CF接入并过滤,隐藏服务器真实IP,DDOS什么的再也不用害怕了。所以即使是动态内容较多的服务,也可以使用CF为自己加一层保护。除了DDOS防护以外,CF也有不少Web相关的安全设置,这都是免费的哦。

2. Cloudflare配置(基于免费服务)

以下所有配置项在CF控制面板中都有详细的解说和帮助,不明白的地方可以登录上去看一下。

  • DNS
    • DNS Records —— 选择“Orange Cloud”,也就是图标是“箭头从黄云中穿过”的这个选项。只有这个选项能够发挥全部的CF功能,实现全站防护和全站CDN。
    • DNSSEC —— 这是一个DNS的安全扩展选项,启用后可以在请求IP的时候验证真实性,但是需要各级DNS和域名商都要支持才行。目前来说使用难度较大,比如我的域名商就不支持.me域名启用该功能。
  • Crypto
    • SSL —— 选择“Full SSL (strict)”,这是最安全的一种选项:双向SSL、会验证证书有效性,而且实施难度不高。现在以Chrome和ios为首的平台,都已经在大力推广https了,所以没有理由不启用这一项。
    • Origin Certificates —— 创建CF的专用证书。上一项SSL选择了strict模式,则会验证己方服务器的证书有效性。如果你没有经过CA签名的SSL证书的话,可以使用这个CF专用证书在strict模式下同样有效。若你懒得去配置letsencrypt等免费服务或者不愿买一个证书的话,可以考虑使用这个CF的私有证书简化配置。
    • Always use HTTPS —— SSL都已经启用了strict项了,这个选项毫无疑问是需要“On”的。
    • HTTP Strict Transport Security (HSTS) —— 如果你确定域名以后所有的流量都经过SSL的话可以启用这一项(内置选项也全部选为“On”且有效期至少一个月),能进一步提升安全性和减少请求次数。不过要注意的是如果你不是很确定是否要一直使用SSL的话则需要谨慎选择,详细的介绍请参照CF内的帮助和google。
    • Authenticated Origin Pulls —— 可以在这个选项或者在Nginx/Apache中对访问IP限制这两项中二选一。
    • Minimum TLS Version —— TLS 1.1。
    • Opportunistic Encryption —— On。其实使用了全站SSL后这个选项已经没什么关系了,不过选上也不会吃亏^_^
    • TLS 1.3 —— Enable+0RTT。
  • Firewall
    • Security Level —— 建议使用默认的Medium,若有被攻击的迹象可以再行调整。
    • Challenge Passage —— 自行选择。
    • IP Firewall —— 自行选择。这个功能在你想要禁用某些IP或者某个区域的IP时非常有用。
  • Speed
    • Auto Minify —— 全部启用。
    • Enable Accelerated Mobile Links —— 自行选择。如果你的网站支持AMP,那么这个选项可以帮助客户端进入AMP模式。
    • Brotli —— On。
    • Rocket Loader —— On(建议开启后测试一遍网站功能)。以前这个功能是beta的,当时可能会对网站的js运行产生不好的影响。虽然目前已经取消了beta,但是建议开启后对自己网站进行适当的测试。
    • Mobile Redirect —— 自行选择。
  • Caching
    • Caching Level —— Standard
    • Browser Cache Expiration —— 自行选择
    • Always Online —— 如果服务器自身没有相关的应急措施的话,可以使用CF提供的一个比较友好的说明页面。
    • Development Mode —— 在线调试网站的时候可以启用这个选项,暂时关闭CF的缓存功能。
  • Page Rules
    • Page Rules —— 免费用户有可以针对单个页面或者一些页面设置3条规则。这些规则是在CF端判断的,所以响应速度会比较快。
  • Network
    • HTTP/2 —— On。
    • WebSockets —— 自行选择。
    • Pseudo IPv4 —— 如果你不使用IPv6的话,这个选项可以不管。
    • IP Geolocation —— CF内置的一个GeoIP功能,如果你不需要使用,或者你服务器内置的有相关功能,可以忽略。
    • Maximum Upload Size —— 免费版只能选择100M。如果你的服务器需要上传较大的文件,可以考虑使用企业版,或者自建一个代理绕过CF进行上传,但是要注意安全问题(比如使用一台次要服务器做代理防止主服务器IP泄漏)
  • Scrape Shield
    • Email Address Obfuscation —— On,防止Email被爬虫抓取。
    • Server-side Excludes —— On,即使不用这个功能对你也没什么影响。
    • Hotlink Protection —— 自行选择。可以防止图片等资源文件被盗链。

3. 己方服务器配置

  • 证书 —— 因为使用了CF的Full SSL (strict)模式,所以必须配置证书,无论是用CA签名的证书或是CF自己的专用证书都可以。
  • 防止第三方绕过CF —— 如果不使用CF的Authenticated Origin Pulls功能的话,建议只允许CF的IP访问(注意这个ip列表有可能会变化),防止第三方绕过CF而直接访问你的网站。
  • 客户端IP —— 因为客户端是通过CF访问你网站的,所以你此刻获取到的IP是CF的服务器IP。不过好在CF在请求原始服务器资源的时候,会将客户端的IP附在http header里的“CF-Connecting-IP”字段中。所以你的日志或其它功能需要用到客户端IP时,可以取这个字段的数据。