📜 前言unsetunset
前面的文章提到当我们把网站托管到 Cloudflare 且打开小橙云后,Cloudflare 就帮我们自动开启 CDN 加速,但是如果没有进行正确的设置会感觉加速不明显,甚至起到了“反向加速的作用”。除了境内网络线路问题,很大因素是没有正确地配置缓存,导致Cloudflare频繁回源影响网站使用体验。本文给大家详细介绍 Cloudflare Cache 的配置尤其是 Cache Rules 的配置,提升网站访问速度。
unsetunset⚙️ 基础设置unsetunset
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节点里的缓存,这么操作可能会暂时降低用户访问你网站的速度,但是可以提高访问内容的准确性
Purge Everything
Purge Everhthing 中文意为「立即清除」,当你点击该按钮后,Cloudflare会立即清除其边缘CDN节点里的缓存,这么操作可能会暂时降低用户访问你网站的速度,但是可以提高访问内容的准确性
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,作为缓存层级中的最高层,确保内容更长时间从缓存中提供,减少源服务器的负担和不必要的流量费用,架构图如下
Cache Reserve
这是一个按量付费的功能。Cache Reserve 是一个建立在 R2 之上的持久的数据存储服务,将网站的可缓存内容写入 Cache Reserve,作为缓存层级中的最高层,确保内容更长时间从缓存中提供,减少源服务器的负担和不必要的流量费用,架构图如下
🧑🏫 Cache Rules详解unsetunset
除了打开上面介绍的各种配置的开关,还要进行相应的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。默认支持以下的拓展类型
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
一般我们的网站由静态资源 + 动态的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接口的请求
☑︎ 验证缓存是否生效unsetunset
打开了各种配置的开关和设置了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在不断提高,用户访问网站的体验也会更好
📝 总结unsetunset
许多境内朋友反馈用了Cloudflare的CDN后“反向加速”,除了境内网络线路问题,更大的可能是Cache没设置好,关键以下两点设置:
-
打开Tiered cache,默认是关闭的。该配置可以减少回源 -
设置Cache Rule ,定制你自己的缓存规则
这样可以让绝大多数静态资源都缓存到Cloudflare CDN中,同时访问后端接口时不访问CDN而是直接回源。
unsetunset💭 后记unsetunset
本文只介绍了Cloudflare Cache最基本的用法,如果结合Worker使用会变得更复杂,后续有使用场景再做具体介绍
评论前必须登录!
立即登录 注册