自定义域名接入 Cloudflare:CDN 加速与缓存规则配置实战

手把手讲解自定义域名接入 Cloudflare CDN 的完整流程:NS 接管、SSL/TLS 模式选择、橙云代理与灰云 DNS 的区别,并用 2024 年后的新 Cache Rules 引擎实战配置静态资源长缓存、HTML 不缓存、后台 Bypass,让边缘缓存命中率最大化。

Cloudflare CDN 是基于全球 300+ 节点 Anycast 网络的内容分发服务:用户请求被路由到地理上最近的边缘节点,静态资源直接从边缘缓存返回,无需回源,从而显著降低延迟与源站带宽压力。免费套餐即包含无限带宽、自动 HTTPS 与基础 DDoS 防护,是个人站点与初创 SaaS 的默认选择。

本文覆盖从域名接入到缓存调优的完整链路,适合:

  • 自有服务器(VPS / 虚拟主机)想通过 CDN 加速的站点
  • 刚买了自定义域名、第一次配置 Cloudflare 的开发者
  • 缓存命中率低、改了内容不生效、想找原因的运营者

对 Cloudflare 整体产品体系不熟悉的读者,建议先阅读 Cloudflare 详解:从 CDN 到全球边缘计算平台

接入流程:从注册到 NS 接管

添加站点与修改 NS 记录

接入 Cloudflare CDN 的前提是把域名的 DNS 解析权交给 Cloudflare

  1. 注册 Cloudflare 账号,点击 Add a Site,输入你的域名(如 example.com),选择 Free 套餐。
  2. Cloudflare 自动扫描现有 DNS 记录并列出,核对无误后继续。
  3. 系统分配两个 Cloudflare nameserver,形如 ada.ns.cloudflare.comgreg.ns.cloudflare.com
  4. 登录域名注册商(阿里云、GoDaddy、Namecheap 等)后台,把 NS 记录改为这两个地址。
  5. 等待生效,通常几分钟到 24 小时,Cloudflare 会发邮件通知站点已激活。

橙云代理 vs 灰云仅 DNS

DNS 记录列表中每条记录都有一个云朵开关,这是接入时最关键的决策:

状态含义流量路径
橙云(Proxied)走 Cloudflare 代理用户 → 边缘节点 → 源站,享受 CDN 缓存、WAF、DDoS 防护,源站真实 IP 被隐藏
灰云(DNS only)仅做 DNS 解析用户直连源站,Cloudflare 只返回解析结果,不缓存、不防护,源站 IP 暴露

网站主域和 www 必须开橙云才能用上 CDN 加速;邮件相关记录(MX、mail、imap 等)必须保持灰云,否则邮件服务会直接挂掉——Cloudflare 不代理 SMTP/IMAP 端口流量。

SSL/TLS 模式:Flexible、Full 与 Full (Strict)

这是新手踩坑最多的地方。进入 SSL/TLS → Overview,四种加密模式的区别:

  • Off:完全不加密,不要用。
  • Flexible:用户到 Cloudflare 走 HTTPS,Cloudflare 回源走 HTTP。源站无需证书,但源站到边缘之间是明文,且若源站强制跳转 HTTPS 会造成无限重定向循环(ERR_TOO_MANY_REDIRECTS)
  • Full:用户到边缘、边缘到源站都走 HTTPS,但 Cloudflare 不校验源站证书合法性(自签名证书也能用)。
  • Full (Strict):全链路 HTTPS,且校验源站证书必须由受信 CA 签发或由 Cloudflare Origin CA 签发。

正确选择:只要源站能装证书,一律选 Full (Strict)。没有证书可以用 Cloudflare 免费提供的 Origin CA 证书(15 年有效期,仅在 Cloudflare 回源时被信任),装到 Nginx/Apache 即可。Flexible 只是历史遗留的过渡方案,新项目不要使用。

HTTPS 配置:边缘证书与安全头

站点激活后,Cloudflare 会自动签发边缘证书(Universal SSL,覆盖 example.com*.example.com),通常 15 分钟内生效,完全免费、自动续期,无需任何操作。

建议顺手完成以下配置(SSL/TLS → Edge Certificates):

  • Always Use HTTPS:开启。所有 HTTP 请求在边缘直接 301 到 HTTPS,不消耗源站资源。
  • Minimum TLS Version:设为 TLS 1.2。TLS 1.0/1.1 已被各浏览器标记为不安全。
  • HSTS:站点确认全站 HTTPS 稳定运行后开启,建议 max-age 先设 6 个月,勾选 Include SubDomains 前确认所有子域都支持 HTTPS。开启 HSTS 后回退 HTTP 很麻烦,需谨慎。
  • Automatic HTTPS Rewrites:开启,自动把页面中的 HTTP 资源链接改写为 HTTPS,缓解混合内容告警。

缓存机制详解:Cloudflare 默认缓存什么

默认缓存的静态资源

开橙云后,Cloudflare 按文件扩展名决定默认是否缓存。常见的默认缓存扩展名包括:

css js jpg jpeg png gif webp avif svg ico
woff woff2 ttf otf
mp3 mp4 avi webm flv
pdf doc docx xls xlsx ppt pptx epub
zip rar tar gz 7z dmg iso
json xml csv txt rss
wasm class jar swf eot

要点:HTML 默认不缓存cf-cache-status 会显示 DYNAMIC;带 Set-Cookie 的响应默认不缓存;源站返回 Cache-Control: privateno-cacheno-store 时不缓存。

Cache-Control 与 Edge TTL 的关系

Cloudflare 区分两个 TTL,理解它们才能调好缓存:

  • Browser TTL:控制浏览器本地缓存多久,来自源站的 Cache-Control: max-age=...
  • Edge TTL:控制边缘节点缓存多久。默认遵循源站的 max-age/s-maxage,但可以通过 Cache Rules 覆盖,与源站解耦。

实战中常见的做法是:源站对 HTML 发 no-cache(保证回源拿最新),对带内容哈希的静态资源发 max-age=31536000, immutable,再按需用 Cache Rules 在边缘层做补充策略。

Cache Rules 实战:新规则引擎

2024 年起,Cloudflare 用全新的 Cache Rules(位于 Caching → Cache Rules)取代了旧的 Page Rules 缓存配置。Page Rules 已被标记为逐步淘汰,新配置应一律使用 Cache Rules。免费套餐提供 10 条规则,每条规则由"表达式匹配条件 + 缓存动作"组成。

经典配置一:静态资源边缘长缓存

对图片、字体、带哈希的构建产物强制边缘缓存一年:

  • When incoming requests match(自定义表达式):
(http.request.uri.path.extension in {"css" "js" "png" "jpg" "jpeg" "webp" "avif" "svg" "woff2" "woff"})
  • Then:Cache eligibility = Eligible for cache,Edge TTL = Override origin,1 year。

即使源站忘发 Cache-Control,边缘也会缓存一年。

经典配置二:HTML 不缓存

对文章页、落地页强制每次回源或短时间缓存:

(http.request.uri.path.extension eq "html") or (http.request.uri.path eq "/")

Then:Cache eligibility = Bypass cache。这样发布新文章后立即生效,不必手动清缓存。

如果用的是静态站点托管(如 Cloudflare Pages),平台已内置合理缓存头,可跳过此条(Hugo 站点的部署与缓存头配置见 Hugo 部署到 Cloudflare Pages 实战);它与 CDN 缓存策略互补,构成 JAMstack 架构 的分发层。

经典配置三:后台与 API Bypass

管理后台、登录态接口、支付回调绝不能进缓存:

(http.request.uri.path contains "/wp-admin") or (http.request.uri.path contains "/api/") or (http.request.uri.path contains "/admin")

Then:Bypass cache。这一条务必放在规则列表最前面——Cache Rules 按顺序执行,命中即停,误把 /api/ 缓存住会把 A 用户的数据发给 B 用户,属于生产事故级别的问题。

性能优化项:免费套餐能开什么

Speed → Optimization 面板中,免费套餐可直接开启的项:

  • Brotli:比 gzip 更高的压缩率,对文本资源(HTML/CSS/JS)体积可再降 15%~25%,开启即可。
  • Early Hints:在源站生成完整响应前,先用 103 状态码告知浏览器预加载关键 CSS/字体,对 LCP 有实质提升,建议开启。
  • HTTP/3 (with QUIC):基于 UDP 的新一代协议,弱网环境握手更快,免费开启。
  • Rocket Loader:延迟加载 JS 以加快首屏渲染。注意:它会改写 script 加载顺序,与部分前端框架(React hydration、第三方统计、支付 SDK)存在兼容问题,开启后务必全站回归测试;出问题可在 Configuration Rules 里对特定路径关闭。
  • Polish 图片优化(Pro 及以上):自动把 JPEG/PNG 转 WebP 并压缩,配合 Mirage 可按设备懒加载,内容站值得升级。

缓存命中率优化:观测与刷新

用 cf-cache-status 判断缓存状态

每次响应的响应头都会带 cf-cache-status,用 curl 即可验证:

curl -I https://example.com/assets/app.a1b2c3.js
HTTP/2 200
content-type: text/javascript
cache-control: public, max-age=31536000, immutable
cf-cache-status: HIT
age: 8642

常见取值含义:

  • HIT:命中边缘缓存,理想状态。
  • MISS:该节点没缓存,已回源并写入缓存,下一次同节点请求应变 HIT
  • EXPIRED:缓存过期,已回源更新。
  • DYNAMIC:该类型默认不缓存(如 HTML)或被规则 Bypass。
  • BYPASS:源站 Cache-Control 要求不缓存,或命中 Bypass 规则。
  • REVALIDATED:缓存过期后回源验证(304),内容未变继续用旧缓存。

排查思路:如果静态资源长期 MISS/BYPASS,先查源站响应头是否带 Set-Cookieprivate,再查 Cache Rules 顺序。

Purge Cache:三种刷新方式

Caching → Configuration → Purge Cache:

  • Purge Everything:清空全站缓存。代价是所有请求回源,源站会瞬时承压,仅在紧急情况下使用。
  • Custom Purge → 单个 URL:按完整 URL 精确刷新,注意带不带 query string 是两个缓存键,免费套餐最常用。
  • 按 Cache-Tag / Hostname / Prefix 刷新:仅 Enterprise 套餐可用。Cache-Tag 配合源站返回 Cache-Tag 响应头,可实现"更新某篇文章只清该文章相关缓存"的精细刷新。

Cache Reserve 简介

Cache Reserve 是付费的大容量持久缓存层:边缘未命中的资源会写入 R2 存储作为"二级缓存",跨节点共享,能把 Tiered Cache 之外的回源率再压低一截。适合大文件分发(安装包、视频)和源站带宽昂贵的场景;普通博客/文档站用默认缓存即可,不必开通。

安全基线:顺手配的三件套

接入 CDN 后,流量都经过 Cloudflare,安全配置几乎零成本:

  • WAF 托管规则:Security → WAF,免费套餐含 Cloudflare Free Managed Ruleset,覆盖常见 OWASP 攻击(SQL 注入、XSS、路径穿越),一键开启。
  • Bot Fight Mode:Security → Bots,免费开启,拦截已知恶意爬虫与扫描器。注意可能对合法 API 客户端误伤,站点有公开 API 时建议改用 Super Bot Fight Mode 或加 WAF 白名单规则。
  • Rate Limiting:Security → WAF → Rate limiting rules,免费套餐提供 1 条规则,给登录、注册、短信接口限流(如每 IP 每分钟 10 次),挡住暴力破解与接口刷量。

这三项加在一起,已经能挡住互联网上绝大多数自动化攻击流量。

常见问题(FAQ)

改了网站内容,为什么前台不更新?

按概率从高到低排查:第一,命中了边缘缓存——用 curl -Icf-cache-status 是否为 HIT,是的话去 Purge Cache 按 URL 刷新;第二,命中了浏览器本地缓存——强刷(Cmd/Ctrl+Shift+R)验证;第三,源站自己还有一层缓存(Nginx proxy_cache、WordPress 缓存插件、对象存储 CDN 回源头),需要逐层清理。长期方案是给 HTML 配短 TTL 或 Bypass,静态资源用内容哈希文件名。

Flexible 和 Full (Strict) 到底选哪个?

永远选 Full (Strict)。Flexible 意味着边缘到源站是明文 HTTP,用户账号密码、Cookie 都在裸奔;而且一旦源站配置了 HTTP 跳转 HTTPS,就会和 Flexible 形成重定向死循环。源站没有证书就去 SSL/TLS → Origin Server 免费申请 Origin CA 证书装上,15 分钟搞定。

灰云和橙云有什么区别?

灰云只做 DNS 解析,流量直连源站,Cloudflare 的缓存、WAF、DDoS 防护全部不生效,源站真实 IP 还会暴露在解析结果里。橙云才是完整的 CDN 代理模式。网站主域必须橙云;邮件(MX/mail/imap/smtp)、SSH 管理入口等非 HTTP 服务必须灰云。

国内访问慢怎么办?

Cloudflare 免费套餐在国内没有备案接入点,国内用户会被路由到美西、日本、新加坡等海外节点,延迟偏高是套餐结构决定的。可选方案:升级到 Business/Enterprise 并解决备案后接入中国网络(京东云合作节点);或者采用双轨策略——国内流量走国内 CDN(需 ICP 备案),海外流量走 Cloudflare,按 Geo DNS 分流。面向海外用户的 SaaS 则完全不受影响。

免费版 WAF 够用吗?

对个人站点和早期 SaaS 够用。Free Managed Ruleset 覆盖 OWASP 核心攻击类别,加 Bot Fight Mode 和 1 条 Rate Limiting 规则,能拦下绝大多数扫描器和低强度攻击。不够用的情况主要是:需要自定义复杂 WAF 表达式(免费版自定义规则有 5 条,基本也够)、需要按 Cache-Tag 精细清缓存、需要高级 Bot 管理对抗撞库——这些才需要考虑 Pro/Business。

相关阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「saas」更多文章