Cloudflare从入门到精通 7. Cache网站加速神器

Cloudflare从入门到精通 7. Cache网站加速神器

DeBill Lv2

📜 前言

前面的文章提到当我们网站把托管到 Cloudflare 打开小橙云后,Cloudflare 就帮我们自动开启了 CDN 加速,但是如果没有进行正确的设置会感觉加速不明显,甚至起到了“反向加速的作用”。除了境内网络线路问题,很大因素是没有正确地配置缓存,导致 Cloudflare 频繁回源影响网站使用体验。本文给大家详细介绍 Cloudflare Cache 的配置尤其是 Cache Rules 的配置,提升网站访问速度。

⚙️ 基础设置

Cache 的设置位于 [Websites --> Zone --> Caching ] 在这里你可以设置你网站所有跟 CDN 缓存相关的内容。

Cloudflare-Caching

Purge Cache

这个设置用于立即清除 CDN 缓存,位于 [Websites --> Zone --> Caching --> Configuration --> Purge Cache

Purge-Cache

主要有两个功能: Custom PurgePurge Everything

Custom Purge

Custom Purge 中文意为「定制化清除」,免费计划的用户只能根据 URL 来定制,且不支持通配符,最多可以设置 30 个 URL。当用户访问指定 URL 资源的时候资源就会被清除,这个设置对于清除特定文件很有用。

Custom-Purge

Purge Everything

Purge Everhthing 中文意为「立即清除」,当你点击该按钮后,Cloudflare 会立即清除其边缘 CDN 节点里的缓存,这么操作可能会暂时降低用户访问你网站的速度,但是可以提高访问内容的准确性

Purge-Everything

Caching Level

因为用户在获取资源时会在 URL 添加参数,缓存级别决定 CDN 应缓存什么类型的静态资源,位于 [Websites --> Zone --> Caching --> Configuration --> Cache Level]

Caching-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]

Browser-Cache-TTL

Crawler Hints

爬虫提示。位于[Websites --> Zone --> Caching --> Configuration --> Crawler Hints]开启该功能后 Cloudflare 会提供高质量的网站信息给爬虫(例如搜索引擎爬虫),建议打开

Crawler-Hints

Always Online™

永远在线。位于[Websites --> Zone --> Caching --> Configuration --> Always Online™]当你的源站挂掉的时候,Cloudflare 提供互联网档案 Wayback Machine 上的网页副本。建议打开

Always-Online

Tiered Cache

这是影响你网站访问速度的关键设置,但是 Cloudflare 是默认关闭的,一定要打开这个配置。位于[Websites --> Zone --> Caching --> Tiered Cache]原理是 Cloudflare 将缓存资源进行了分层,当请求到达 Cloudflare 任意 CDN 节点时,会以最快的方式从内部网络获取缓存资源,如果不打开该开关,可能某次请求 CDN 节点没有命中缓存的话,那么该节点就会去回源,用户体验就差了一大截

Tiered-Cache

Cache Reserve

这是一个按量付费的功能。Cache Reserve 是一个建立在 R2 之上的持久的数据存储服务,将网站的可缓存内容写入 Cache Reserve,作为缓存层级中的最高层,确保内容更长时间从缓存中提供,减少源服务器的负担和不必要的流量费用,架构图如下

Cache-Reserve-Architecture

[Websites --> Zone --> Caching --> Cache Reserve]就能一键打开,博主因为没用过所以这里不再多说,感兴趣的朋友试一下

Cache-Reserve-2

🧑‍🏫 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
2
3
4
5
6
7
8
9
7Z	CSV	GIF	MIDI	PNG	TIF	ZIP
AVI DOC GZ MKV PPT TIFF ZST
AVIF DOCX ICO MP3 PPTX TTF
APK DMG ISO MP4 PS WEBM
BIN EJS JAR OGG RAR WEBP
BMP EOT JPG OTF SVG WOFF
BZ2 EPS JPEG PDF SVGZ WOFF2
CLASS EXE JS PICT SWF XLS
CSS FLAC MID PLS TAR XLSX

可以说基本支持绝大多数格式的文件,如果你有特别格式的文件要缓存,就要靠下面的 Cache Rules 设置

规则设置

这是关键的配置,位于[Websites --> Zone --> Caching --> Cache Rules]

Cache-Rule

一般我们的网站由静态资源 + 动态的api数据组成,设置 Cache Rules 的目标是让静态资源都能命中,动态资源则让 CDN 放行,这里抛砖引玉给大家介绍两条规则,具体要根据自己网站的情况调整。

缓存 html 页面

Cloudflare 默认是不缓存 html 页面的,我们可以通过设置进行缓存。点击Create Rule按钮后进入到设置页面。

Cache-Html

这里特别说明一下两个参数,Edge TTLBrower TTL。TTL(Time To Live)指缓存留存时间,Edge TTL指 CDN 节点缓存资源的时长,Brower TTL指浏览器缓存资源的时长,具体设置看你网站更新频率,一般Brower TTL设得比Edge TTL

放行后端接口请求

接着我们再设置一条规则直接放行访问后端 api 接口的请求

Bypass-Api

☑︎ 验证缓存是否生效

打开了各种配置的开关和设置了 Cache Rule,接下来就要验证缓存是否生效。

Cache-Status

访问你的网站,例如: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 在不断提高,用户访问网站的体验也会更好

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 进行许可。
评论