Cloudflare从入门到精通 7. Cache网站加速神器
📜 前言
前面的文章提到当我们网站把托管到 Cloudflare 打开小橙云后,Cloudflare 就帮我们自动开启了 CDN 加速,但是如果没有进行正确的设置会感觉加速不明显,甚至起到了“反向加速的作用”。除了境内网络线路问题,很大因素是没有正确地配置缓存,导致 Cloudflare 频繁回源影响网站使用体验。本文给大家详细介绍 Cloudflare Cache 的配置尤其是 Cache Rules 的配置,提升网站访问速度。
⚙️ 基础设置
Cache 的设置位于 [Websites --> Zone --> Caching ]
在这里你可以设置你网站所有跟 CDN 缓存相关的内容。
Purge Cache
这个设置用于立即清除 CDN 缓存,位于 [Websites --> Zone --> Caching --> Configuration --> Purge Cache
主要有两个功能: Custom Purge
和Purge Everything
Custom Purge
Custom Purge 中文意为「定制化清除」,免费计划的用户只能根据 URL 来定制,且不支持通配符,最多可以设置 30 个 URL。当用户访问指定 URL 资源的时候资源就会被清除,这个设置对于清除特定文件很有用。
Purge Everything
Purge Everhthing 中文意为「立即清除」,当你点击该按钮后,Cloudflare 会立即清除其边缘 CDN 节点里的缓存,这么操作可能会暂时降低用户访问你网站的速度,但是可以提高访问内容的准确性
Caching Level
因为用户在获取资源时会在 URL 添加参数,缓存级别决定 CDN 应缓存什么类型的静态资源,位于 [Websites --> Zone --> Caching --> Configuration --> Cache Level]
No query string
仅在没有查询字符串时从缓存中提供资源,例如:debill.cc/pic.jpg
,带请求参数的都不返回资源
Ignore query string
无论用户的请求 URL 是否携带请求参数,都提供一样的资源,例如当用户访问debill.cc/pic.jpg
Standard
没有特殊需求选择标准就行
Browser Cache TTL
客户浏览器缓存你网站静态资源的时间,默认是 4 小时,最高可以设置一年,如果你的网站静态资源变更比较少可以将这个值设高一点。位于[Websites --> Zone --> Caching --> Configuration --> Browser Cache TTL]
Crawler Hints
爬虫提示。位于[Websites --> Zone --> Caching --> Configuration --> Crawler Hints]
开启该功能后 Cloudflare 会提供高质量的网站信息给爬虫(例如搜索引擎爬虫),建议打开
Always Online™
永远在线。位于[Websites --> Zone --> Caching --> Configuration --> Always Online™]
当你的源站挂掉的时候,Cloudflare 提供互联网档案 Wayback Machine 上的网页副本。建议打开
Tiered Cache
这是影响你网站访问速度的关键设置,但是 Cloudflare 是默认关闭的,一定要打开这个配置。位于[Websites --> Zone --> Caching --> Tiered Cache]
原理是 Cloudflare 将缓存资源进行了分层,当请求到达 Cloudflare 任意 CDN 节点时,会以最快的方式从内部网络获取缓存资源,如果不打开该开关,可能某次请求 CDN 节点没有命中缓存的话,那么该节点就会去回源,用户体验就差了一大截
Cache Reserve
这是一个按量付费的功能。Cache Reserve 是一个建立在 R2 之上的持久的数据存储服务,将网站的可缓存内容写入 Cache Reserve,作为缓存层级中的最高层,确保内容更长时间从缓存中提供,减少源服务器的负担和不必要的流量费用,架构图如下
在[Websites --> Zone --> Caching --> Cache Reserve]
就能一键打开,博主因为没用过所以这里不再多说,感兴趣的朋友试一下
🧑🏫 Cache Rules 详解
除了打开上面介绍的各种配置的开关,还要进行相应的 Cache Rules 设置才能更好地缓存你的网站内容。免费计划里每个域名只能设置10条规则
,而且是所有子域名也共用这 10 条规则。
默认缓存行为
当你把域名迁移到 Cloudflare 上,打开小黄云代理就可以使用 Cloudflare CDN 了,那么默认缓存了哪些资源呢?
Cloudflare 会根据你源站 Http Header 的值决定是否缓存该资源,满足以下条件该资源不会被缓存
- Cache-Control 设置了 private, no-store, no-cache, or max-age=0.
- 存在 Set-Cookie 字段
- 非 HTTP Get 请求
满足以下条件,资源会被缓存
- Cache-Control 设置成了 public 且 max-age 大于 0
- 设置了 Expires 字段且日期是未来的时间
Cloudflare 仅根据文件扩展名进行缓存,而不根据 MIME 类型进行缓存。默认情况下,Cloudflare CDN 不缓存 HTML 或 JSON,但会缓存网站的 robots.txt。默认支持以下的拓展类型
1 | 7Z CSV GIF MIDI PNG TIF ZIP |
可以说基本支持绝大多数格式的文件,如果你有特别格式的文件要缓存,就要靠下面的 Cache Rules 设置
规则设置
这是关键的配置,位于[Websites --> Zone --> Caching --> Cache Rules]
一般我们的网站由静态资源 + 动态的api数据
组成,设置 Cache Rules 的目标是让静态资源都能命中,动态资源则让 CDN 放行,这里抛砖引玉给大家介绍两条规则,具体要根据自己网站的情况调整。
缓存 html 页面
Cloudflare 默认是不缓存 html 页面的,我们可以通过设置进行缓存。点击Create Rule
按钮后进入到设置页面。
这里特别说明一下两个参数,Edge TTL
和Brower TTL
。TTL(Time To Live)指缓存留存时间,Edge TTL
指 CDN 节点缓存资源的时长,Brower TTL
指浏览器缓存资源的时长,具体设置看你网站更新频率,一般Brower TTL
设得比Edge TTL
小
放行后端接口请求
接着我们再设置一条规则直接放行访问后端 api 接口的请求
☑︎ 验证缓存是否生效
打开了各种配置的开关和设置了 Cache Rule,接下来就要验证缓存是否生效。
访问你的网站,例如:yourdomain.com,如果你的网站用了 Cloudflare CDN,Cloudflare 会在响应的报文头里添加一个cf-cache-status
字段用于标识该资源是否命中了缓存,这个字段一共有以下状态:
- HIT:命中缓存
- MISS: 没有命中缓存,该资源从源服务器获取
- NONE/UNKNOWN: Cloudflare 生成的响应表明该资源不符合缓存条件。这可能是以下的几种情况导致的
- Worker 直接生成响应,未发送任何子请求。在这种情况下,响应并非来自缓存,因此缓存状态将为 NONE/UNKNOWN。
- Worker 请求发起了子请求 (fetch)。在这种情况下,子请求将记录其缓存状态,而主请求将记录为 NONE/UNKNOWN(主请求未命中缓存,因为 Worker 位于缓存之前)。
- 触发了 WAF 自定义规则来阻止请求。在到达缓存之前,由于没有缓存状态,Cloudflare 将记录为 NONE/UNKNOWN。
- 重定向规则或始终使用 HTTPS 导致全球网络返回重定向到另一个资源/URL 的响应。
- EXPIRED:在 CDN 中发现缓存,但是过期了,该资源从源服务器获取
- STALE:在 CDN 中发现缓存,但是过期了且该资源无法从源服务器获取
- BYPASS:Cache Rule 里面设置的 BYPASS 规则
- REVALIDATED:该资源由 Cloudflare 的缓存提供,但已过期。该资源已通过 If-Modified-Since 标头或 If-None-Match 标头重新验证。
- UPDATING:该资源由 Cloudflare 的缓存提供,已过期,但源 Web 服务器正在更新该资源。通常只有访问量特别大的缓存资源同时缓存失效时才会触发该状态。
- DYNAMIC:Cloudflare 认为该资产不适合缓存,并且你为设置 Cache Rule 指示 Cloudflare 缓存该资产。该资产是从源 Web 服务器请求的。
只要你设置得当,你在 Cloudflare 的后台管理面板里就能看到网站的 Percent Cached 在不断提高,用户访问网站的体验也会更好
📝 总结
许多境内朋友反馈用了 Cloudflare 的 CDN 后“反向加速”,除了境内网络线路问题,更大的可能是 Cache 没设置好,关键以下两点设置:
- 打开 Tiered cache,默认是关闭的。该配置可以减少回源
- 设置 Cache Rule ,定制你自己的缓存规则
这样可以让绝大多数静态资源都缓存到 Cloudflare CDN 中,同时访问后端接口时不访问 CDN 而是直接回源。
💭 后记
本文只介绍了 Cloudflare Cache 最基本的用法,如果结合 Worker 使用会变得更复杂,后续有使用场景再做具体介绍
- 标题: Cloudflare从入门到精通 7. Cache网站加速神器
- 作者: DeBill
- 创建于 : 2024-11-23 12:00:00
- 更新于 : 2025-01-09 23:09:41
- 链接: https://debill.me//cloudflare-series/cloudflare-cache-7/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。