数力科技Digital Force
← 全部文章

Cloudflare 到底是做什么的

做网站的过程里迟早会有人跟你说「挂到 Cloudflare 上」。你照做了,域名的 DNS 换了地方,网站还是那个网站,看不出区别,也不知道自己开了什么。

它做的事其实可以分成三块,分开看就清楚了。

一、它站在你和访客中间

正常情况下,访客输入你的域名,DNS 告诉他你的服务器在哪,他直接连过去。

用了 Cloudflare 之后,DNS 给出的是 Cloudflare 的地址。访客连到离他最近的 Cloudflare 节点,由这个节点去找你的服务器要内容,再转给访客。

你的服务器地址因此不再对外暴露。这是它最基础的一层价值:别人打不到你的服务器,就很难直接攻击它。

代价是你的服务器看到的所有请求都来自 Cloudflare。如果你的程序要记录访客真实 IP,得从请求头里取,不能用连接来源。这是接上之后最常见的一个坑,表现为「所有访客的 IP 都一样」。

二、它把内容存一份在离访客近的地方

这是多数人以为的全部,也确实是最有价值的部分。

Cloudflare 在全球有几百个节点,离新西兰最近的在奥克兰。你的服务器可能在悉尼、新加坡或者美国。第一个访客来的时候节点没有内容,去你服务器取一份存下来;之后的访客直接从奥克兰拿。

省下的是一整趟物理往返。奥克兰到悉尼一个来回大约 110 毫秒,这段距离在光速下就是这么久,任何优化都改不了。命中缓存的请求不需要走这一趟。

但有两件事需要讲清楚,否则你会对它期待过高:

默认它只缓存图片、样式、脚本这类静态文件,不缓存页面本身。因为它不知道你的页面是不是每个人看到的都一样。如果你的网站是 WordPress 这类每次现拼页面的系统,那么访客每次打开首页,Cloudflare 还是要回你的服务器要一次。要让它缓存页面,得自己配规则。

缓存时间是上限,不是保证。节点存储是所有网站共用的,按访问热度淘汰。流量小的网站,即使设成一年,几小时没人访问那份副本也会被挤掉。这解释了为什么你的网站有时秒开有时要等——详细的我们单独写过一篇

三、它挡掉一部分坏流量

互联网上大量请求不是人发的:扫描漏洞的、试密码的、抓内容的、发垃圾评论的。小网站也一样会被扫,因为扫描是自动的,不挑对象。

Cloudflare 免费版会挡掉其中相当一部分,这部分省下来的服务器资源是实打实的。

但它挡不住的东西也要知道:应用层面的漏洞它管不了。程序本身有问题、密码太弱、插件老旧不更新,这些 Cloudflare 一个都解决不了。它是门口的保安,不是屋里的锁。

免费版够不够用

对绝大多数企业网站,够。

免费版包含:全球节点分发、免费 SSL 证书、基础的攻击防护、无限带宽。最后一条对图片多的网站尤其实在——流量费在别处是要另算的。

付费版主要买的是更细的规则控制、更详细的日志、更多的分析数据,以及一些针对性的加速功能。这些在你的网站还没有稳定流量之前,基本用不上。

接上之后最容易出事的四个地方

SSL 模式选错。它有几种模式,决定 Cloudflare 到你服务器这一段用不用加密。选成 Flexible 的话,访客到 Cloudflare 是加密的,Cloudflare 到你服务器是明文的,而浏览器显示的是安全的小锁。这是一种虚假的安全感。只要你的服务器有证书,就应该选 Full (strict)。

缓存了不该缓存的东西。如果你配了页面缓存规则却没排除后台路径,会出现两个症状:登录后台看到的是别人的缓存页面,或者你改了内容线上不变。后台、登录页、接口路径都必须排除,带登录 cookie 的请求也要排除。

它会缓存 404。一个图片还没传上去,有人访问了一次,Cloudflare 记住了「这里是 404」。之后你把图片传上去了,访客看到的还是 404,直到缓存过期。这个坑我们踩过两次,两次都花了时间才想到。排查方法是在地址后面加一个随机参数——如果加了参数就正常,那就是缓存问题,不是文件问题。

改了文件但线上是旧的。样式和脚本被缓存之后,你改了服务器上的文件,Cloudflare 还在发旧版本。解决办法是给文件加版本号——地址变了就是新文件,缓存自然失效。不要靠手动清缓存过日子,那是靠人记得,迟早会忘。

一个简单的自查

访问你的网站,打开开发者工具的网络面板,看响应头里有没有 cf-cache-status

HIT 表示这次是从节点直接给的。MISS 表示这次回了你的服务器。DYNAMIC 表示 Cloudflare 认为这个内容不该缓存,每次都回源。

如果你的页面一直是 DYNAMIC,说明缓存这块你其实没用上,只用到了防护和 SSL。这不算错,但你可能以为自己已经很快了。

我们交付的站点默认配好这些,包括缓存规则、版本号策略和排除路径。这些配置本身没有秘密,上面写的就是全部要点,区别只在于有没有人真的一项项去设、去验证。

Get started

开始一个项目先聊三十分钟

先聊聊你的想法,我们给你一份免费的方案建议。

AI 客服右下角气泡
所在地Auckland, NZ