Cloudflare 免费版能用出什么:CDN、缓存、规则与常见误区

Cloudflare 免费版给个人站点的价值远超「加速」:它同时是 DNS、CDN、证书签发方和一层 WAF。这篇记我真正用到的功能。

一、橙色云到底做了什么

开启代理(橙色云)后,流量路径变成:

bash
用户 → Cloudflare 边缘节点 →(回源)→ 你的服务器

带来的变化:

  • 隐藏源站 IP:用户看到的是 CF 的 IP,扫不到你真实服务器;
  • 边缘缓存:静态资源在节点上,用户就近取;
  • 自动 HTTPS:CF 与用户之间自动有证书;
  • 压缩与优化:免费版可开 Brotli、自动压缩图片( Polish)、HTTP/3。

开了橙色云之后,源站与 CF 之间也要配证书(CF 的 Flexible 模式可以不用,但那意味着 CF→源站 是明文,不推荐)。用 Full (Strict) 模式 + 源站自签或 Let's Encrypt 证书最稳。

二、加密模式怎么选

模式CF→源站要求
FlexibleHTTP 明文源站无证书也能用(不推荐
FullHTTPS 但不校验源站有证书即可
Full (Strict)HTTPS 且校验源站要有有效证书(推荐

选 Full (Strict),源站用 certbot 签一份证书就行。

三、缓存规则

免费版默认只缓存静态扩展名(js/css/图片等),HTML 不缓存。想改的话用 Cache Rules

  1. Rules → Cache Rules → Create rule
  2. 匹配条件例如「文件扩展名属于 css/js/png/webp」;
  3. 设置 Cache eligibility: Eligible for cache + Edge TTL: 1 month
  4. HTML 那一档单独设 Bypass cache,否则发新版用户看不到。

清缓存:

  • Caching → Configuration → Purge Everything(全清);
  • 或 Custom Purge 只清某个 URL;
  • 用 API 集成到部署脚本里:
bash
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"purge_everything":true}'

四、页面规则:www 跳转、强制 HTTPS

免费版有 3 条 Page Rules(现在推荐用 Rules → Redirect Rules,更灵活):

场景配置
强制 HTTPSAlways Use HTTPS(SSL/TLS → Edge Certificates)
www → 根域Redirect Rules:hostname 以 www. 开头 → 301 到根域
某路径不缓存Cache Rules 里 Bypass

五、安全相关(免费版就够用)

  • WAF:免费版有基础规则集,能挡大部分扫描和常见注入;
  • Bot Fight Mode:挡掉相当一部分垃圾机器人;
  • Rate Limiting:免费版有最基本的限制规则,CC 攻击时能顶一下;
  • 防火墙规则:可以按国家/地区、UA、路径封禁,比如直接挡掉某个 UA。

一个实战经验:开启「Under Attack Mode」会先让用户过 5 秒检查页,对抗小型 CC 很有效,但会明显影响真实用户体验,只在被打的时候临时开。

六、为什么开了 CDN 反而更慢

四个常见原因:

  1. 节点选择问题:国内访问被分配到海外节点,这是免费版最大的短板,无解(只能换线路或不用);
  2. HTML 被缓存:把动态内容缓存了,用户看到旧内容,你以为「生效了但其实没生效」;
  3. 回源慢:CDN 只缓存静态,动态请求仍要回源。源站在美国、用户在亚洲,动态请求依然慢;
  4. 没开压缩:CF 的 Brotli 在 Speed → Optimization 里,确认打开了。
bash
# 看是否命中 CF 缓存
curl -sI https://www.bzii.cn | grep -i "cf-cache-status"
# HIT / MISS / DYNAMIC / BYPASS

# 看经过了哪个节点
curl -sI https://www.bzii.cn | grep -i "cf-ray"

七、源站要做的配合

既然源站 IP 被隐藏了,就该只放行 Cloudflare 的 IP 段,防止别人绕过 CDN 直接打源站:

bash
# 定期拉取 CF IP 列表并写进 ufw(写成定时任务)
for ip in $(curl -s https://api.cloudflare.com/client/v4/ips | jq -r '.result.ipv4_cidrs[]'); do
  sudo ufw allow proto tcp from $ip to any port 443
done
sudo ufw delete allow 443/tcp   # 删掉之前对所有人开放的规则

同时 Nginx 里恢复真实 IP(否则日志全是 CF 的 IP):

nginx
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... 完整列表见 cloudflare.com/ips
real_ip_header CF-Connecting-IP;

八、免费版的边界

不给你用的东西:Argo 智能路由、图片 Mirror、高级 WAF 规则、自定义缓存键大部分能力、100+ 条页面规则。

对个人站点来说,这些缺失基本无感。免费版最值钱的其实是隐藏源站 IP 和那层 WAF。