这张图片是技术专题的主题标识,左侧标注有“万字长文·技术专题”,下方依次为主题标题“Cloudflare从入门到精通”,以及说明文字“一个域名搞定建站、邮箱、存储和AI后端”,右侧配有Cloudflare标志性的橙色云朵样式品牌标识,该图片对应文档开头的专题标题部分,点明了本次内容围绕Cloudflare展开,聚焦借助一个域名实现多种相关服务的讲解主题。

很多人第一次登录 Cloudflare,是因为某篇建站教程让你“把域名接进 Cloudflare”。照着改完域名服务器,网站确实能打开了,可再回到控制台,左边一长串菜单摆在眼前:域名、计算、AI、存储和数据库、应用程序安全、Zero Trust。每一项都像有用,又不知道哪些跟自己有关。

我从写 VPS 教程开始就一直在用 Cloudflare,前后单独写过域名托管、CDN、WAF 规则、邮件路由和优选 IP。9 月发过一条 Cloudflare 十项福利,后来又陆续发了域名邮箱、防 AI 爬虫、数字名片、低成本做 AI 应用和新 CLI 几条短帖。零散的点越攒越多,这次干脆串成一篇。

这是Cloudflare平台的操作界面截图,左侧导航栏中标记了两处核心入口:一处是“域名”选项,标注有“域名设置从这里进”的提示;另一处是“计算”分类下的“存储和数据库”选项,标注有“建站、AI、存储”的提示。界面中间区域展示了域名列表、Workers项目列表以及最近操作记录,对应文档中提到的Cloudflare域名接入、建站、存储及AI相关服务的功能入口,与文档介绍的Cloudflare免费版服务操作相关。

这篇文章用一个域名贯穿全程。先把域名接进 Cloudflare,配好解析和 HTTPS;再从 GitHub 仓库发布一个网站,给域名配一个能收信的邮箱,用 R2 存图片和备份;最后写一个 Worker,调用 Workers AI 跑开源模型,并把整个账号交给 Agent 通过命令行管理。

标题写了从入门到精通,这里的精通也有一个实际范围。你能用免费版独立搭起个人网站、域名邮箱、对象存储和一个小型 AI 接口,知道每项服务的免费额度在哪里,遇到常见报错知道先查什么,也知道涉及 API 令牌和删除操作时该停下来确认。企业级 WAF 调优、Zero Trust 组网和大规模付费架构,不在这一篇里展开。

正文用 example.com 代替你的域名,操作时换成自己的即可。截图里的演示域名是我的 79702701.xyz,控制台是中文界面,菜单名以截图为准。

本文导读

01|先把域名接进来

第一章说清 Cloudflare 对普通人有什么用,第二、三章完成域名接入、DNS 和 HTTPS。看完这三章,你的域名就已经在 Cloudflare 上正常工作。

02|网站、邮箱和存储

第四章从 GitHub 仓库发布网站并绑定域名,第五章配置域名邮箱,第六章用 R2 存放图片和备份。这三样加起来,就是一个个人站点最常用的基础设施。

03|挡住不该来的流量

第七章处理 AI 爬虫和机器人流量,知道谁在爬你的网站,哪些能直接拦,哪些只是拖住。

04|给网站加上后端和 AI

第八章写第一个 Worker,第九章接上 Workers AI,并介绍 Cloudflare 新发布的 Clef 决策模型。

05|交给 Agent,再留一张速查表

第十章用新的 cf 命令行,让 Claude Code、Codex 或 Pi 这类 Agent 管理 Cloudflare。第十一章汇总免费额度和常见故障,只想解决眼前问题,可以直接从最后一章开始查。

一、Cloudflare 能替普通人做什么

1. 它站在你的网站前面

很多人把 Cloudflare 理解成一个 CDN,让网站打开快一点。这只说对了一半。

更准确的理解是,Cloudflare 站在访客和你的服务器之间。域名接进来以后,访客的请求先到 Cloudflare 的网络,再由它决定怎么处理:直接返回缓存,转给你的服务器,拦下可疑流量,或者交给运行在 Cloudflare 上的代码。

所以它能做的事情分成三层。

  • 网站入口。 DNS 解析、CDN 加速、HTTPS 证书和基础防护。这是大多数人用 Cloudflare 的起点。
  • 开发者平台。 Workers 运行网站和后端代码,R2、KV、D1 负责存储。没有服务器,也能做出一个完整的小应用。
  • Agent 基础设施。 Workers AI 能直接调用开源模型,Clef 专门帮 Agent 做判断,新的 cf 命令行则是为 Agent 设计的操作入口。

2. 免费版已经够个人用很久

这篇文章的所有操作都在免费版内完成。个人网站、作品页、文档站和小工具,大多数时候碰不到免费额度的上限。

↔ 左右滑动查看完整表格
服务免费额度(截至 2026 年 10 月官方文档)
Workers每天 100,000 次请求,每次最多 10 毫秒 CPU 时间;访问静态资源的请求免费且不限量
R2每月 10 GB 存储,100 万次 A 类操作,1,000 万次 B 类操作,出站流量免费
Workers AI每天 10,000 Neurons
Email Routing接收和转发免费

这些数字以后可能调整,正式使用前以官方文档为准。每项服务的细节放在对应章节里。

3. 读完以后的完成标准

学完这篇文章,你应该可以完成下面这些事。

  • 把一个域名接进 Cloudflare,分清已代理和仅 DNS 两种解析
  • 选对 SSL/TLS 加密模式,避开“重定向次数过多”
  • 从 GitHub 仓库发布网站,并绑定自己的域名
  • 让 hi@example.com 这样的地址收信,并转发到常用邮箱
  • 创建 R2 存储桶,用自己的域名公开访问文件
  • 看清哪些 AI 爬虫在访问网站,并开启 AI 迷宫
  • 部署一个 Worker,让它调用开源模型返回回答
  • 让 Agent 用 cf 查命令、预览改动,再执行

这些服务看起来很多,最后都会落在同一个域名上。接下来先从控制台开始。

二、把域名接进 Cloudflare

1. 先认控制台的入口地图

登录 Cloudflare 控制台 以后,左侧菜单是整个账号的入口。第一次不用把每一项都点开,先记住和本文有关的几组。

  • 域名:管理接进来的域名,每个域名有自己的 DNS、SSL/TLS 和安全设置
  • 计算:Workers 和 Pages、电子邮件服务都在这里
  • AI:Workers AI 模型
  • 存储和数据库:R2 对象存储、Workers KV、D1 数据库

Cloudflare 的控制台改版比较频繁,菜单名称和位置可能和截图有出入。找不到时,按 ⌘K 打开顶部的搜索框,直接搜功能名,通常比翻菜单快。

图片展示的是Cloudflare控制台的域名接入页面。页面上方有“Onboard your agent to Cloudflare”提示,下方标题为“Time to build something great.”。页面中部有一个搜索框,提示可搜索“最近访问”“ask”“access”“aig”等内容。下方列表显示了“79702701.xyz”等域名,右侧有向右箭头。该图片与上下文紧密相关,上下文提到在“域名”管理中选择接入新域名入口,输入根域名example.com,此图展示了该操作后的页面界面。

2. 添加域名

进入“域名”,选择接入新域名的入口(英文界面是 Onboard a domain),输入根域名 example.com。这里填的是不带 www 的主域名,子域名会在后面的 DNS 记录里管理。

继续以后选择 Free 计划。Cloudflare 会扫描这个域名现有的 DNS 记录,并列出它找到的结果。

扫描结果不一定完整。重点核对三类记录:根域名 example.com 指向哪里,www 等常用子域名在不在,邮箱用的 MX、SPF、DKIM 记录有没有漏。漏掉的记录手动补上,再继续。这一步漏了邮件记录,切换以后最常见的结果就是收不到信。

3. 去注册商修改域名服务器

Cloudflare 会给你分配两条域名服务器地址,形如 ashton.ns.cloudflare.com。接下来要回到买域名的地方,比如 Namecheap、Spaceship 或阿里云,把原来的域名服务器换成这两条。

接入以后,这两条地址也能随时在域名的 DNS → 设置里查到。

图片展示的是Cloudflare域名设置页面。左侧导航栏有多个选项,当前选中“设置”。页面上方显示域名“79702701.xyz”。中间区域有“Cloudflare名称服务器”和“DNSSEC”设置内容。其中,“Cloudflare名称服务器”部分显示了两条名称服务器地址,分别为“ashton.ns.cloudflare.com”和“nataly.ns.cloudflare.com”,并有红色框线突出显示。该图片与上文提到的“回到买域名的地方,把原来的域名服务器换成这两条”内容相关,直观呈现了需填写到注册商的域名服务器地址。

修改之前先确认一件事:如果注册商那边开启了 DNSSEC,要先关闭。Cloudflare 官方文档专门提醒过,带着旧的 DNSSEC 切换域名服务器,可能导致域名暂时无法访问。接入完成后,可以在同一个页面里重新启用。

各家注册商的修改入口不同,我之前单独写过一篇域名托管到 Cloudflare 的完整步骤,找不到入口可以对照着看。

4. 等待生效,认识域名自己的菜单

域名服务器的修改需要时间传播,快的几分钟,慢的可能要更久。期间什么都不用做,Cloudflare 会自动检测,生效后域名状态会变成已激活。

点进这个域名,左侧菜单会换成它自己的设置。后面要用到的 AI Crawl Control、DNS、电子邮件、SSL/TLS 和安全性,都在这一列里。

这张图片展示了接入Cloudflare后单个域名的管理界面,界面左侧用红色虚线框标注了该域名专属的设置菜单,包含AI Crawl Control、代理就绪、数据分析、Observability、DNS、电子邮件、SSL/TLS、安全性等核心功能选项,图中的红色提示气泡明确标注“域名自己的设置都在这里,DNS、邮件、SSL、安全、AI爬虫”,呼应了文档中“生效后域名左侧菜单换成自己的设置”的内容,该界面还呈现了对应域名的流量相关数据,如唯一访问者、请求总数、已缓存的百分比等。

到这里,域名的解析已经交给 Cloudflare 管理。下一步处理两个最容易出问题的设置:代理状态和 HTTPS。

三、DNS、代理与 HTTPS

1. 橙色云和灰色云

打开域名的 DNS → 记录,每条记录后面都有一列代理状态。

这张图片展示的是某域名的DNS记录页面,页面顶部显示该域名下共12条DNS记录,可用DNS记录数量为1000条。页面内的DNS记录列表中,“代理状态”列清晰标注了两种核心状态:部分记录的代理状态为带橙色云标的“已代理”,对应上下文提及的“橙色云:走代理”,这类记录的流量会先经Cloudflare再转向服务器,依赖Cloudflare的防护、缓存等功能;其余记录的代理状态为带灰色云标的“仅DNS”,对应上下文的“灰色云:只解析”,这类记录仅由Cloudflare负责域名解析,访客直接连接服务器。
  • 已代理(橙色云):访客先到 Cloudflare,再转到你的服务器。CDN、HTTPS 证书、防护和缓存都依赖这个状态,访客也看不到服务器的真实 IP。
  • 仅 DNS(灰色云):Cloudflare 只负责解析,访客直接连你的服务器。

网站的根域名和 www 通常开橙色云。下面这些情况要改成灰色云:

  • 用来 SSH 登录服务器的域名。代理只转发网页常用的端口,SSH 走不通。
  • 邮件服务器用的域名,比如 MX 记录指向的 mail.example.com。它的 A 记录开了代理,邮件就送不到服务器。MX、TXT 这类记录本身没有代理选项,截图里三条 MX 记录就固定显示仅 DNS。
  • 需要访客直连服务器的其他服务,比如某些游戏或数据库端口。

一个实用习惯:网站用一个开代理的域名,SSH 和面板另配一个灰色云的子域名,两者分开。

国内访问开了代理的网站,速度有时不理想,可以参考我之前写的优选 IP 教程。

2. SSL/TLS 模式选错,最常见的结果是打不开

进入 SSL/TLS → 概述,可以配置加密模式。它决定的是 Cloudflare 和你的服务器之间怎么连接。访客和 Cloudflare 之间,开了代理就会自动使用 HTTPS。

图片展示了Cloudflare加密模式和源连接设置的相关内容。左侧列出三种模式:自动SSL/TLS(推荐)、完整(严格)、关链(不安全),并说明各自特点。右侧是完整(严格)模式的详细图示,显示浏览器通过HTTPS连接Cloudflare,Cloudflare再用HTTPS连接源服务器,适用于不含敏感数据的生产站点。右下角红色框突出显示“有证书就选它”及“站点装了有效证书时最推荐”字样,与上下文强调自动模式选中完整(严格)相呼应。
  • 自动 SSL/TLS(推荐):Cloudflare 扫描你的源服务器,自动应用它支持的最安全模式。截图里的域名,自动模式当前选中的就是完整(严格)。
  • 完整(严格):用 HTTPS 连接,并验证服务器证书。最安全。
  • 完整:用 HTTPS 连接,但不检查证书,自签名证书也接受。
  • 灵活:Cloudflare 用 HTTP 连你的服务器,服务器上不用装证书,但这一段是明文。
  • 关闭(不安全):全程不加密,不要用。

不确定怎么选,就保持自动模式。想手动指定时,服务器装了有效证书,比如 Let's Encrypt 或 Cloudflare 签发的源服务器证书,就选完整(严格)。

用灵活模式时最常见的翻车,是浏览器提示“重定向次数过多”。原因是服务器自己设置了 HTTP 跳转 HTTPS,Cloudflare 却一直用 HTTP 去连,于是两边来回跳。改成完整或完整(严格)通常就能解决。

托管在 Workers 上的网站不涉及你自己的服务器,证书由 Cloudflare 自动处理,这一节的设置主要影响有源服务器的网站。

3. 打开始终使用 HTTPS

在 SSL/TLS → 边缘证书页面,打开 Always Use HTTPS(始终使用 HTTPS)。访客输入 http:// 时会被自动跳到 https://。

到这里,域名已经可以安全地接住访问。接下来让它真正承载内容。

四、从 GitHub 仓库发布一个网站

1. 发布入口已经换成了 Workers

以前在 Cloudflare 发静态网站,第一反应是用 Pages。现在控制台的创建流程默认走 Workers:从 GitHub 导入仓库,构建后作为 Worker 部署。页面顶部还留着一行“需要使用旧版 Pages 工作流?继续前往 Pages”,说明 Pages 已经是旧入口。

对普通用户来说,差别不大。官方定价页写明,访问静态资源的请求免费且不限量,导入页面上也有同样的提示;以后想给网站加接口、绑定存储,也都在同一个项目里接着做。

我这里用自己的 Pi 蓝皮书仓库 pi-bluebook 演示,它现在挂在 pi.xiaomovps.com 上。你也可以用之前那篇长文GitHub 从入门到精通里建的 github-first-project,一个只有 index.html 的仓库就够用。

2. 选择仓库

进入 计算 → Workers 和 Pages,点击创建,选择从 GitHub 导入存储库。第一次使用需要授权 Cloudflare 访问你的 GitHub 账号,可以只授权需要部署的仓库,不必放开全部。

图片展示的是Cloudflare从GitHub仓库发布网站时选择仓库的界面。界面中显示“Select a repository”提示,下方有搜索框,已输入“pi”,并有“pi-bluebook”仓库被红色框线突出显示。右下角有“返回”和“下一步”按钮,其中“下一步”按钮被蓝色框线突出显示。该图片与上下文紧密相关,上下文提到在仓库列表里搜索并选中要部署的仓库,点击下一步,此图直观呈现了这一步骤的操作界面及关键操作元素。

在仓库列表里搜索并选中要部署的仓库,点击下一步。

3. 构建与部署设置

图片展示的是Cloudflare创建应用中设置应用程序的界面。左侧有“创建应用”选项,右侧是设置界面,显示项目名称为“pi-bluebook”,构建命令和部署命令分别为“正在加载...”和“npx wrangler deploy”。界面右下角有“返回”和“部署”按钮。该图片与上下文紧密相关,上下文介绍了从GitHub仓库发布网站时的构建与部署设置步骤,此图直观呈现了设置界面及关键信息,帮助用户了解操作情况。
  • 项目名称:默认和仓库同名,会出现在 workers.dev 地址里。
  • 构建命令:可选。纯 HTML 项目不需要构建;用 Hugo、Astro、VitePress 这类框架时,填对应的构建命令。
  • 部署命令:默认是 npx wrangler deploy,保留即可。

确认后点击部署。部署失败时,先看构建日志里第一条报错,多半是构建命令或输出目录没对上。

4. 拿到访问地址

部署完成后进入项目概述页。右下角的“域名和路由”里能看到 项目名.你的子域.workers.dev 这个地址,右上角的“访问”按钮可以直接打开网站。截图里的项目已经绑定过自定义域名,所以这里多了一行 pi.xiaomovps.com,刚部署的项目只有 workers.dev 一个地址,绑定方法在下一节。

这张图片展示的是Cloudflare Pages的操作界面,页面顶部显示项目名称为pi-bluebook,界面内明确标注了上线地址位置,提示刚部署的项目默认仅拥有workers.dev格式的访问地址,页面中还显示了该项目已绑定的自定义域名pi.xiaomovps.com,与文档中提及的相关内容完全对应,同时界面的右上角还提示了“访问”操作的打开入口,整体清晰呈现了Cloudflare Pages部署项目后的相关域名信息及操作指引。

以后每次向 main 推送提交,Cloudflare 都会自动重新部署。

广告媒流(小程序)-AI生图

5. 绑定自己的域名

切到项目的“域”标签页,在“自定义域和路由”里点击添加域名,填入 www.example.com 或 example.com。域名已经在同一个 Cloudflare 账号下,DNS 记录会自动创建,不用手动去配。

绑定前先确认这个主机名没有别的用途。官方文档写明,已经有 CNAME 记录的主机名不能直接绑定,要先删掉那条记录。根域名如果还指向 VPS 上的旧网站,建议先用 www 或 blog 这类空闲的子域名试,确认没问题再迁移。

图片展示的是Cloudflare管理后台的Access页面。页面显示了Worker URL,包括生产与预览的URL,均允许任何拥有此URL的人访问。下方是自定义域和路由部分,搜索框可输入域名,右侧有“添加路由”和“添加域名”按钮。已绑定的自定义域“pi.xiaomovps.com”以红色框突出显示,其类型为生产,区域是xiaomovps.com。该图片与上下文关系紧密,直观呈现了将GitHub仓库发布网站到Cloudflare后,如何在管理后台进行域名绑定等操作。

绑定完成后,用自己的域名访问,网站就上线了,证书也已经自动配好。

想做一个更完整的个人主页,可以参考我之前发的数字名片短帖,同样是 GitHub 加 Cloudflare 的组合。

五、给域名配一个能收信的邮箱

1. 邮件路由做的是收信和转发

有了 example.com,很多人会想要一个 hi@example.com 这样的邮箱,放在网站和名片上更像样。

Cloudflare 的邮件路由(Email Routing)可以免费实现这件事。它的工作方式是:发到 hi@example.com 的邮件,由 Cloudflare 接收,再转发到你已有的 Gmail、Outlook 或 QQ 邮箱。

先说清它的边界:邮件路由负责收信和转发,不是一个完整的邮箱服务。用这个地址对外发信是另一项功能,控制台里叫“电子邮件发送”,目前还是 Beta,本文不展开。

使用前提是域名的 DNS 托管在 Cloudflare。上一章已经完成了这一步。

2. 接入域名

在控制台进入 计算 → 电子邮件服务 → 电子邮件路由。列表里是已经开启的域名,新域名点右上角的“接入域名”。

图片展示的是Cloudflare控制台中邮件路由页面。页面上方有“邮件路由”标题及“查看文档”链接,下方说明创建自定义邮件地址,将邮件路由至验证的邮件地址或Workers。右侧有“目标地址”输入框和“接入域名”按钮,下方是域名列表,显示名称、状态、DNS记录、子域名、已接收邮件等信息,其中“xiaomovps.com”状态为“已启用”,DNS记录显示“配置错误”。该图与上下文介绍的接入域名操作相关,直观呈现了操作页面及域名状态等关键信息。

接入时,Cloudflare 会提示添加几条 DNS 记录,包括 MX、SPF 和 DKIM,确认即可,通常几分钟内生效。

如果这个域名之前已经在用别家的企业邮箱,现有的 MX 记录会和邮件路由冲突。开启前想清楚,邮件到底由谁来收。列表里的“DNS 记录”一列显示配置错误时,多半就是这类记录没对上。

3. 先加目标地址,再建路由规则

点进域名,可以看到概览、活动日志、路由规则、目标地址等几个标签页。右侧的配置摘要里,路由状态显示已启用,说明收信这一层已经通了。

图片展示了Cloudflare域名管理界面。左侧有概览、活动日志、路由规则、目标地址、目标Workers、设置等标签页,当前选中“路由规则”。右侧配置摘要显示路由状态已启用,DNS记录已绑定,路由规则、目标地址、域名均为0。下方后续步骤提示添加目标地址、选择转发支支电子邮件的投递位置、添加目标Worker等操作。图片与上下文关系紧密,直观呈现了域名管理界面及当前状态,辅助说明先加目标地址再建路由规则的操作背景。

先在“目标地址”里添加你的常用邮箱。Cloudflare 会往这个邮箱发一封验证邮件,点击里面的链接,状态变成已验证才能使用。

然后切到“路由规则”,创建一条规则。

图片展示了Cloudflare创建路由规则的界面。界面中有“电子邮件匹配模式”“选择操作”等区域,分别对应步骤①填地址前缀、②选择域名、③选“发送到电子邮件”、④保存。其中“电子邮件匹配模式”处有“@”和“选择域名”两个选项,突出显示;“选择操作”处有“发送到电子邮件”选项。该图片与上文介绍给域名配能收信邮箱的操作步骤紧密相关,直观呈现了操作界面及关键步骤。
  • 电子邮件匹配模式:@ 前面填 hi,后面选择你的域名
  • 操作:选“发送到电子邮件”,目标选刚才验证过的邮箱
  • 保存

用另一个邮箱给 hi@example.com 发一封测试邮件,几秒到几分钟内,常用邮箱就能收到。收不到时先看垃圾箱,再检查 MX 记录是否只剩 Cloudflare 的那几条。

规则可以建很多条,比如 github@、shop@、newsletter@ 分别对应不同用途,哪个地址开始收垃圾邮件,直接删掉那一条规则。列表里默认还有一条“全收”规则,打开以后,所有没匹配上的地址都会按它处理。想把这件事玩到极致,可以看我之前写的无限子邮箱配置指南。

六、用 R2 存图片和备份

1. R2 最大的好处是出站不收费

R2 是 Cloudflare 的对象存储,可以理解成一个放文件的大仓库,图片、视频、备份压缩包、静态资源都能放。

它最受欢迎的一点,是出站流量免费。很多云存储按下载流量收费,图片被大量访问时账单会涨得很快。R2 免费版每月包含 10 GB 存储、100 万次 A 类操作和 1,000 万次 B 类操作,下载流量本身不收费。

A 类操作大致对应写入、列出这类动作,B 类操作大致对应读取。个人图床和备份,一般很难用完。

需要注意,免费额度只适用于标准存储,不包括不频繁访问存储。

2. 创建存储桶

进入 存储和数据库 → R2 对象存储,点击创建存储桶。

图片展示的是Cloudflare创建存储桶的界面。界面上方提示从创建的空存储桶开始,可使用仪表板或Wrangler CLI将数据添加到存储桶中。关键信息包括:存储桶名称为“xiaomvps”,位置保持自动,存储桶类型默认为标准,需点击“创建存储桶”按钮。该图片与上下文紧密相关,是对创建存储桶操作步骤的直观呈现,帮助用户了解创建存储桶时需填写的关键信息及操作流程。
  • 存储桶名称:页面上写着“存储桶名称是永久性的”,创建后不能改,最好一开始就想好用途。
  • 位置:保持自动即可,Cloudflare 会按你的位置选一个区域。
  • 默认存储类:保持“标准”。选“不频繁访问”就用不了免费额度。

点击创建存储桶,进入以后把一张图片拖进去上传,就能在“对象”列表里看到它。

3. 用自己的域名公开访问

存储桶默认是私有的,外部打不开里面的文件。要让网站引用图片,需要在存储桶的“设置”里开启公开访问,有两条路。

图片展示的是Cloudflare R2存储桶设置界面。左侧有“对象”“指标”“设置”选项卡,当前选中“设置”。右侧“常规问题”部分显示存储桶名称、创建时间、位置等信息。自定义域处,有“+添加”按钮,已添加“r2.79702701.xyz”,状态为“活动”,Access为“已启用”。公共开发URL处,已启用,提示已对存储桶禁用公共开发URL。该图与上下文介绍存储桶设置相关,直观呈现了开启自定义域的操作及状态。
  • 自定义域。 在“自定义域”里点击添加,填入 img.example.com,确认 DNS 记录后连接。状态变成活动,通常只要几分钟。截图里我用的是 r2.79702701.xyz。
  • 公共开发 URL。 也就是 r2.dev 地址,点击启用,输入 allow 确认。

正式使用一定选自定义域。官方文档写得很清楚,r2.dev 地址有速率限制,只适合开发测试,也用不了缓存和访问控制。截图里这个存储桶就只开了自定义域,公共开发 URL 保持禁用。

开启以后,用 https://img.example.com/文件名 就能直接访问刚上传的图片,可以填进网站、Markdown 或博客的图床设置里。

设置页上方的 S3 API 地址里带着你的账户 ID,截图分享前记得打码。

想要一个带上传界面的图床,可以看看 awesome-cloudflare 合集里收录的 CloudFlare-ImgBed,它支持把 R2 作为存储后端。这类第三方项目部署前,记得按那篇 GitHub 长文里说的,先看作者、维护状态和 License。

七、挡住不该来的流量

1. 先看清谁在爬你的网站

现在除了搜索引擎,还有大量 AI 公司的爬虫在抓取网页,有的拿去训练模型,有的替用户实时搜索。对内容站来说,这部分流量不一定带来访客,却会消耗资源。

Cloudflare 把这部分管理放在域名菜单里的 AI Crawl Control,免费版也能用。它的概述页按运营商列出访问过网站的爬虫,比如 OpenAI、Anthropic、Common Crawl、ByteDance、Google,以及每家被允许的请求数。

这张图片是Cloudflare平台的爬虫访问数据统计界面,展示了某演示域名过去7天的爬虫访问相关数据。界面顶部标注了总请求数、允许的请求数、失败的请求数三个核心指标,分别为974、390、584,且对应标注了数据变化的占比情况;右上角明确显示ChatGPT-User的请求有113个。下方按运营商分类列出了各类爬虫的请求数据,包括OpenAI、Anthropic、ByteDance、Google等平台,各平台对应标注了允许的请求数及数据占比,清晰呈现了不同爬虫的访问与放行情况,是文档中“看清谁在爬你的网站”这部分内容的直观数据展示。

以我这个演示域名为例,过去 7 天 AI 爬虫一共发来 974 次请求,放行 390 次,失败 584 次,OpenAI 的 ChatGPT-User 单个爬虫就有 113 次。这里的失败不等于被拦截,页面提示其中 349 次是爬虫请求了不存在的页面,收到了 404。一个流量不大的小站也是这样,内容多的网站只会更多。

2. 在“安全性”里决定放行还是拦截

AI Crawl Control 下面有概述、指标、安全性、优化、信号几个子页。放行和拦截在“安全性”里设置,可以针对每个爬虫单独选择。

  • 放行:这个爬虫能带来引用和流量,或者你本来就愿意被它收录。
  • 拦截:你不希望内容被它抓走。拦截时可以选择返回 403 禁止访问,或者 402 需要付费。

判断方法很简单:搜索引擎类的爬虫一般放行,否则网站在搜索结果里会消失;纯训练用途的爬虫,按你对内容的态度决定。

3. AI 迷宫是拖住,不是拦截

有些爬虫不遵守 robots.txt,换着身份继续抓。AI 迷宫(AI Labyrinth)的思路是给它们设一个迷宫:在网页里加入只有爬虫能看到的 nofollow 链接,链向 AI 生成的内容,干扰不遵守爬取规范的自动程序。控制台上的说明写得很清楚,这些链接不会改变网页本身的内容,只对自动程序可见。

开启位置在域名的 安全性 → 设置,找到“AI 迷宫”这一行,打开右侧开关。它目前还标着 Beta。

图片展示的是Cloudflare网站防护设置界面。界面中列出了多种防护策略,如配置AI自动程序策略、质询通过期、AI迷宫、Bot Fight等。其中,AI迷宫策略被红色框线突出显示,旁边有红色箭头指向的开关,提示“打开这个开关”。该图片与上下文紧密相关,上下文在介绍Cloudflare的防护功能时,提到AI迷宫是拖住,不是拦截,且有官方文档说明其动作不算拦截,此图直观呈现了AI迷宫策略在界面中的位置及开关状态。

要分清它和拦截的区别。官方文档写明,AI 迷宫的动作不算拦截,请求本身不会被阻止或质询。想明确挡住某个爬虫,还是用上一节的拦截。同一个页面里的“配置 AI 自动程序策略”,可以按类型控制 AI 自动程序的访问。

更完整的防护规则,比如按国家、路径或请求频率拦截,可以看我之前整理的免费版 WAF 规则详解。

八、Workers:给网站加一段后端

1. Workers 是什么

第四章发布的网站是静态的:页面写好放上去,所有人看到的内容一样。想要一个能处理请求的后端,比如接收表单、调用 API、返回动态数据,传统做法是租一台服务器。

Workers 让你把一段 JavaScript 代码放到 Cloudflare 的网络上运行。请求进来,代码执行,返回结果。不用管服务器,也不用管扩容。

免费版每天可以处理 100,000 次请求,每次请求最多 10 毫秒 CPU 时间。这里的 CPU 时间只算代码真正在计算的时间,等待网络请求返回的时间不算在内,所以调用外部 API 的代码一般不容易超限。

2. 部署第一个 Worker

为了把后端和第四章的网站分开演示,这里单独建一个新的 Worker。进入 计算 → Workers 和 Pages,点击创建,选择从 Hello World 开始,名称填 hello-ai,然后部署。

部署完成后,你会得到一个 hello-ai.你的子域.workers.dev 的地址。在浏览器里打开它,能看到返回的 Hello World!。

该图片展示了浏览器访问hello-ai子域workers.dev地址的页面内容,页面中显示着“Hello World!”,且有红色虚线框标注该文字,搭配红色箭头和文字标注“看到这行就部署成功”。这张图片对应了文档中部署Cloudflare Workers后打开指定地址得到运行结果的步骤,直观呈现了Worker部署成功后在浏览器中返回的页面效果,证明代码已在Cloudflare网络上成功运行,与文档内容形成对应验证关系。

这一行字说明代码已经在 Cloudflare 的网络上跑起来了。下一章就给它接上模型。

3. 需要存数据时,再认识 KV 和 D1

Worker 本身不保存数据,每次请求都是独立的。需要存东西时,Cloudflare 还有两个免费的存储,都在“存储和数据库”菜单里。

↔ 左右滑动查看完整表格
存储适合存什么免费额度
Workers KV配置、缓存、短链接这类按键取值的数据每天 10 万次读取、1,000 次写入,共 1 GB
D1 SQLite 数据库需要查询的表格数据,比如留言、订单记录每天读取 500 万行、写入 10 万行,共 5 GB

本文的例子用不到它们,先知道有这两样东西,等项目需要时再接。

九、Workers AI:用免费额度跑开源模型

1. 不用 GPU,也能调用模型

Workers AI 把一批开源模型放在 Cloudflare 的 GPU 上,Worker 可以直接调用,不需要自己准备显卡,也不用单独申请模型的 API Key。

免费版每天有 10,000 Neurons。Neurons 是 Cloudflare 自己的计量单位,不同模型、不同长度的请求消耗不一样。超出后需要升级到付费计划,按每 1,000 Neurons 0.011 美元计费。

在控制台的 AI 菜单里,可以浏览目前支持的模型,有聊天、翻译、图像生成、语音识别等不同类型。

2. 给 Worker 绑定 Workers AI

回到 hello-ai 的概述页,找到“绑定”卡片,点击添加绑定,选择 Workers AI,变量名填 AI。绑定的作用,是让代码里可以通过 env.AI 调用模型。变量名要和代码里一致,大小写也算。

3. 改代码,让它回答问题

点击右上角的编辑代码,把默认代码换成下面这段。

export default {
  async fetch(request, env) {
    const answer = await env.AI.run("@cf/google/gemma-4-26b-a4b-it", {
      messages: [
        { role: "system", content: "你是一个回答简洁的中文助手。" },
        { role: "user", content: "用两句话解释 CDN 是什么。" },
      ],
      chat_template_kwargs: { enable_thinking: false },
    });
    return Response.json(answer);
  },
};

这里调用的是 Google 的 Gemma 4 开源模型,模型 ID 取自 Cloudflare 官方入门文档。messages 和常见的聊天接口格式一样,system 设定角色,user 是要问的问题。

部署以后,刷新刚才的 workers.dev 页面。

图片展示的是浏览器中调用Google的Gemma 4开源模型后的页面内容。页面地址为https://hello-ai-xxxx.workers.dev,显示了一段JSON格式的文本,其中“content”字段包含模型用中文写的回答,解释了CDN(内容分发网络)的作用。该图片与上文提到的部署代码后刷新workers.dev页面,查看模型用中文写的回答相呼应,直观呈现了代码部署后的效果。

浏览器里出现一段 JSON,content 里就是模型用中文写的回答。一个没有服务器、没有显卡、没有额外 API Key 的 AI 接口,就这样跑起来了。

返回结果末尾的 usage 也值得看一眼。这次一问一答一共 84 个 token,消耗约 1.67 Neurons。按每天 10,000 Neurons 的免费额度粗算,这种短问答一天能跑五六千次。

模型列表和推荐 ID 会随时间更新。调用报错时,先去 AI 菜单的模型页确认这个 ID 是否还在。

还有一点要注意:这个 workers.dev 地址谁都能打开,每打开一次就消耗一次额度。免费版超出每天的额度后只会调用失败,不会扣钱,但演示完最好在设置里关掉 workers.dev 访问,或者直接删除这个 Worker。真要做成对外的服务,先加上访问控制。

4. Clef:专门帮 Agent 做判断的模型

10 月 1 日,Cloudflare 发布了两个开源的决策模型 Clef 和 Clef-flash。它们和聊天模型不一样,不负责写长段回答,只回答选择题。

你给它一段内容,再给一组问题和可选答案,比如“这条工单紧不紧急”“该转给哪个团队”。它不生成文字,而是给每个选项打出一个概率。下游程序拿到概率,就能自动决定下一步。

↔ 左右滑动查看完整表格
模型底座特点
ClefQwen 3.8 27B64K 上下文,支持图片输入,中位延迟约 209 毫秒
Clef-flashQwen 3.5 9B中位延迟约 39 毫秒,速度优先

两个模型都以 Apache 2.0 协议开源,权重放在 Hugging Face,也可以在 Workers AI 上通过 @cf/cloudflare/clef 和 @cf/cloudflare/clef-flash 直接调用。

它适合 Agent 里那些需要快速分流的环节:这封邮件要不要处理,这条评论是不是垃圾信息,这个任务该交给哪个工具。以前这些判断也要调用一次大模型,现在可以交给更快的专用模型。

十、让 Agent 接管:用 cf 管理 Cloudflare

1. 一半的命令行操作已经来自 Agent

Cloudflare 原来的命令行工具叫 Wrangler,主要用来开发和部署 Workers。官方公开过一组数据:2026 年 3 月,Agent 发起的 Wrangler 使用占四分之一,到发布 cf 的前一周已经升到 48%,差不多一半。

于是在 9 月 28 日,Cloudflare 发布了新的命令行工具 cf,目前处于公开测试阶段。它和 Wrangler 的主要区别有两点。

  • 覆盖范围更大。 Wrangler 大约有 280 条命令路径,cf 覆盖了 Cloudflare API 的 3,000 多项操作,DNS、R2、邮件、安全设置都能管。
  • 为 Agent 设计。 结果默认输出 JSON,能用自然语言搜索命令,危险操作有额外保护。

Wrangler 不会马上消失。官方的计划是公开测试结束后,再发布一个提示迁移的 Wrangler 最终版本,并继续维护 18 个月。已有项目可以慢慢迁移,第四章导入仓库时默认的部署命令也还是 npx wrangler deploy。

2. 安装并登录

cf 通过 npm 安装,电脑上需要先装好 Node.js。

npm install --global cf
cf auth login

cf auth login 会打开浏览器,在 Cloudflare 页面确认授权后,回到终端就可以使用。

3. 不知道命令,就让它自己搜

cf 最适合 Agent 的一点,是不需要提前背命令。用自然语言描述要做的事,它会返回最多 5 条匹配的命令。

cf cli search "create D1 database"
图片展示了Cloudflare Agent用自然语言搜索命令后的返回结果。上方提示“用自然语言搜命令”,下方是一组JSON数据,每条包含“command”(命令)和“summary”(说明)。其中,最匹配的命令“cf d1 create”排在第一,其命令为“Create D1 Database”,说明是创建D1数据库。该图片与上下文紧密相关,直观呈现了Cloudflare Agent在用户不知具体命令时,能通过自然语言搜索返回匹配命令的功能。

返回结果是一组 JSON,每条有命令和说明,最匹配的 cf d1 create 排在第一。找到命令以后,可以继续查看这条命令需要哪些参数。

cf schema d1 create

4. 先预览,再执行

涉及创建和修改的命令,可以加上 --dry-run,只打印将要发出的请求,不真正执行。

cf d1 create --name my-database --dry-run
图片展示了使用cf d1 create命令创建数据库时的输出结果。命令为“cf d1 create --name my -database --dry -run”,输出中显示了请求方法为POST,接口地址为“https://api.cloudflare.com/client/v4/accounts/.../d1/database”,请求体中“name”字段值为“my -database”。右下角红色框内标注“只打印请求,不会执行”。该图片与上下文紧密相关,直观呈现了在非交互模式下,使用--dry -run参数时命令的输出情况,帮助理解创建数据库时的请求信息。

输出里能看到请求方法、接口地址和请求体,确认无误再去掉 --dry-run 正式执行。接口地址里同样带着账户 ID,截图分享前记得打码。

删除类操作还有一层保护。在非交互模式下,也就是 Agent 自动执行时,删除命令如果没有加 --force,会输出 Aborted. 并停止。Agent 想删东西,必须明确地多加一个参数,这给了你在审查命令时一个明显的信号。

要注意,这时命令的退出码是 0,看起来像执行成功了,其实什么都没删。官方文档专门提醒,退出成功不代表资源已被删除,让 Agent 删完以后再查一次确认结果。

5. 告诉 Agent 用它

在用户级的 AGENTS.md 或 CLAUDE.md 里加一句官方推荐的说明,这样所有项目都会生效:

When interacting with Cloudflare, use the cf CLI unless the project has a Wrangler configuration file.

意思是操作 Cloudflare 时优先用 cf,项目里已经有 Wrangler 配置文件的除外。Claude Code、Codex、Pi 这类 Agent 读到这句,就知道该调用哪个工具。

之后可以直接对 Agent 说:“把我账号里的 R2 存储桶列出来”“给 example.com 加一条 CNAME,先 dry-run 给我看”。

6. 令牌只给必要权限

让 Agent 在无人值守的环境里运行时,比如定时任务或 CI,不能每次都打开浏览器登录。这时需要创建一个 API 令牌,放进 CLOUDFLARE_API_TOKEN 环境变量。

这一步有三条规矩。

  • 令牌只勾选任务需要的权限和域名,不要图省事选全部。
  • 设置合理的有效期,不用的令牌及时删除。
  • 令牌不要写进代码、提交到仓库,也不要贴进和 AI 的对话。一旦泄露,立即在控制台撤销并重新创建。

Agent 能帮你点按钮,但它拿到的权限,就是出问题时的影响范围。

十一、免费额度速查与常见问题

1. 免费额度一张表

↔ 左右滑动查看完整表格
服务免费额度需要更多时
Workers每天 100,000 次请求,每次 10 毫秒 CPU;访问静态资源的请求免费且不限量付费计划每月 5 美元起,含一定用量
旧版 Pages每月 500 次构建,同时 1 个构建,单站 20,000 个文件,单文件 25 MiB看官方付费计划
Workers KV每天 10 万次读取、1,000 次写入,1 GB 存储包含在 Workers 付费计划里
D1每天读取 500 万行、写入 10 万行,5 GB 存储看官方付费计划
R2每月 10 GB 存储、100 万次 A 类操作、1,000 万次 B 类操作,出站免费;仅限标准存储超出部分按用量计费
Workers AI每天 10,000 Neurons付费计划每 1,000 Neurons 0.011 美元
邮件路由收信和转发—

数字来自 2026 年 10 月的 Cloudflare 官方文档,以后可能调整。

2. 最常见的六种翻车

↔ 左右滑动查看完整表格
现象先检查什么第一处理动作
浏览器提示重定向次数过多SSL/TLS 模式是不是灵活,服务器是否强制 HTTPS改成自动、完整或完整(严格)
域名一直没激活注册商的域名服务器有没有改对,DNSSEC 是否关闭核对两条 NS 地址,耐心等待传播
接入后收不到邮件MX、SPF、DKIM 记录是否在扫描时漏掉补齐邮件记录,或检查邮件路由的 DNS 记录是否显示配置错误
SSH 连不上服务器用来连接的域名是不是已代理(橙色云)换成仅 DNS 的子域名,或直接用 IP
R2 图片访问变慢或被限制是不是在用 r2.dev 地址改用自定义域
Worker 报错超出 CPU 限制代码里有没有大量计算或循环把计算挪走,或升级付费计划

3. 一条日常使用路径

以后遇到新项目,可以按这个顺序想。

  1. 域名先接进 Cloudflare,DNS 和 HTTPS 配好。
  2. 网站从 GitHub 仓库导入,推送后自动部署。
  3. 需要邮箱,开邮件路由转发。
  4. 需要存文件,用 R2 加自定义域。
  5. 需要接口,写一个 Worker;需要存数据,再接 KV 或 D1。
  6. 需要模型,绑定 Workers AI;需要快速判断,试试 Clef。
  7. 日常维护交给 Agent,用 cf 查命令、先预览、再执行。

不是每个项目都要走完七步。大多数个人网站停在第 3 步就已经够用,等真有需求时再往下加。

4. 延伸阅读

下面几篇是我之前写的单项教程,可以按需要接着看。

参考资料