Cloudflare OS实战:DNS、CDN、WAF与Workers全解析
发布时间:2026/10/28 3:44:48 锦皓数字建站

做后端开发这些年我经手过不少网站的部署和运维。早期自己买服务器、配Nginx反向代理、手动申请SSL证书、再加一层CDN或者安全防护整套流程下来光是基础设施就够喝一壶的。后来深度使用Cloudflare之后我发现一个很有意思的现象大家已经开始不把它当作单纯的CDN厂商而是像使用一套操作系统一样在使用它。cloudflare-os这个说法就是我在圈子里看到高频出现的一个词。它解决的核心问题其实很朴素当你的站点要同时应对全球用户访问、恶意流量、证书续期、静态资源分发这些事与其东拼西凑搭一套复杂架构不如把DNS、CDN、WAF、边缘计算这些能力统一交给同一个平台来治理。这篇文章我会从网络操作系统这个视角把Cloudflare的核心组件拆开揉碎结合我自己在真实项目里的配置过程和踩过的坑讲清楚它到底能做什么、怎么上手、以及哪些地方容易翻车。如果你是对CDN、DNS、网络安全有兴趣的后端工程师、运维同学或者是想省点基础设施维护精力的独立开发者这篇内容应该能帮你少走不少弯路。1. cloudflare-os到底指什么为什么说它是一套操作系统1.1 从单一CDN到全栈基础设施先明确一个前提Cloudflare官方并没有发布过名为OS的产品。但你去看社区讨论和技术博客越来越多的人把Cloudflare称作OS核心原因是它的能力覆盖面已经远远超出了传统CDN的范畴。传统CDN解决的是内容分发问题把静态资源缓存到离用户更近的边缘节点减少跨网访问的延迟。而今天的Cloudflare光是我日常用到的能力就包括DNS解析、CDN缓存、Web应用防火墙、DDoS防护、TLS证书托管、边缘计算Workers、静态站点托管Pages、对象存储R2。这些能力组合在一起几乎覆盖了一个网站从流量入口到应用运行的完整链路。我的理解是OS这个类比并不夸张。你看一台电脑的操作系统它负责管理CPU、内存、磁盘这些硬件资源再向应用层提供统一的运行环境。Cloudflare做的事情其实非常相似它管理的是全球分布的边缘节点和网络资源向上给开发者提供DNS、缓存、安全、计算等标准化的服务接口。你不需要关心请求到底落在哪个机房、证书该怎么续、缓存节点怎么部署这些系统级的活统统由平台处理掉了。开发者要做的只是像装软件一样在控制台里打开某个能力、配置几条规则、写一个Worker函数。这个比喻还有一个更深层的含义操作系统的价值在于统一和抽象。你不用分别去研究BGP路由怎么配、TLS证书怎么签、WAF规则怎么落地只要学会跟这个系统打交道把域名交进去把源站地址告诉它剩下的交给它调度。这也是cloudflare-os这个概念越来越流行的原因——开发者需要的不是一堆零散工具而是一个内聚的基础设施底座。1.2 解决传统架构的哪些痛点拿我自己早年的一个小型电商项目举例。没有上Cloudflare之前架构大概是这样的两台云服务器一台跑Nginx和PHP应用一台跑MySQL和RedisNginx上配了缓存模块SSL证书每三个月手动续一次遇到流量尖峰还会被CPU报警惊到。这样的架构有几个很现实的痛点。第一源站直接暴露在公网IP一旦被扫描到攻击者可以绕过CDN直接打源站后面挂再多的安全设备也无济于事。第二证书续期是重复劳动虽然可以用certbot自动化但多台服务器、多个域名时依然要维护定时任务一旦有域名漏掉用户浏览器直接弹安全警告。第三缓存层的性能调优很费劲命中率低、缓存失效策略写错、不同路径的缓存规则互相打架排错排到怀疑人生。第四全球用户访问时只有一台源站跨地域的延迟完全没办法优化欧美的用户打开页面要等好几秒。把DNS切到Cloudflare、开启代理模式之后这些痛点被大幅简化。源站IP被隐藏了攻击流量到边缘节点就被过滤掉证书变成平台托管自动签发自动续期缓存策略在边缘节点上统一配置一条规则覆盖所有区域全球的Anycast网络让用户在最近的边缘节点完成请求接入。我并不是说用了Cloudflare就什么都不用管而是说很多操作系统层的杂活被平台收走了你可以把精力放到应用层去这本身就是一种巨大的效率提升。1.3 核心架构边缘网络与Anycast要理解这套OS绕不开边缘网络和Anycast这两个概念。先说说Anycast。普通的IP解析是单播Unicast一个域名解析到一个具体IPAnycast则是一组服务器共享同一个IP地址路由协议会把请求自动送到距离最近的那台服务器。Cloudflare的DNS和边缘节点用的就是Anycast架构所以你在世界各地做dig查询同一个域名可能会解析出不同的IP每个IP都是离你最近的边缘节点地址。这意味着什么对流量的处理从用户直接访问源站变成了用户接入最近的边缘节点再由边缘节点回源站取数据。边缘节点承担了三件事一是缓存静态内容直接回给用户二是执行安全过滤拦截恶意请求三是转发动态请求到源站。这种就近计算、集中管控的模型我觉得是理解Cloudflare所有产品的一把钥匙。后续讲Workers、讲WAF规则其实都是围绕这个模型展开的——所有能力都长在这张边缘网络上你在控制台里做的每一个配置本质上都是在告诉这张网络什么请求该怎么处理。2. 核心组件实战拆解DNS、CDN、WAF与Workers2.1 DNS流量入口的基础配置我处理任何一个新项目时第一步永远是先把域名交到Cloudflare的DNS体系里因为后面的所有能力——CDN、WAF、Worker路由——都要依附在DNS之上。配置DNS记录时有个必须搞清楚的概念代理状态。在Cloudflare控制台里每条DNS记录前面都有一个云朵图标橙色表示已代理Proxied灰色表示仅DNSDNS only。只有开启代理流量才会经过Cloudflare的边缘节点CDN缓存和安全防护才会生效如果关闭代理Cloudflare就只是一个普通的DNS服务器流量直接连到你的源站IP。我在实际项目中的默认策略是静态资源图片、CSS、JS的子域名开启代理API接口看场景决定。开启代理时边缘节点会替源站回应请求源站IP对外完全不可见这是非常重要的一层安全效益。但要注意开启代理后Cloudflare边缘节点会频繁向源站发起回源连接如果你在源站设置了基于来源IP的访问控制需要放行Cloudflare的IP段否则会出现用户访问正常、源站却在报错的诡异现象。另外我强烈建议给每条DNS记录设置合理的TTL。默认情况下Cloudflare会使用自动TTL在DNS记录变更频繁的割接期可以临时把TTL调低到60秒让解析快速生效等稳定后再调回300秒或自动减少不必要的查询压力。2.2 CDN缓存策略让静态请求止步于边缘CDN是Cloudflare最基础也最容易被低估的能力。很多用户默认开启代理后就以为缓存自动生效了但实际用下来缓存策略是需要认真设计的。Cloudflare默认缓存策略只缓存静态文件扩展名jpg、png、css、js等和部分静态响应。动态页面、API返回的JSON、带Set-Cookie响应头的请求默认都是透传到源站的。如果你的站是个动态站点默认配置下缓存命中率可能低得可怜因为大部分人访问的是HTML页面。这里分享一个我常用的进阶做法通过Cache Rules缓存规则为特定路径自定义缓存行为。比如我可以对 /static/ 路径设置Browser Cache TTL为30天、Edge Cache TTL为7天对 /api/products 这种变更不频繁的接口用Edge Cache TTL强制缓存60秒。配置重点在于理解缓存键Cache Key——默认情况下不同URL对应不同缓存条目如果你想对同一个URL的不同参数做统一缓存可以通过Cache Key设置忽略某些查询参数。比如商品列表接口带推广跟踪参数时如果不做忽略处理同一个接口内容会被缓存出几十个副本既浪费空间又拖低命中率。另外Cache-Control响应头决定了浏览器和边缘节点怎么处理缓存。我排障时遇到很多次明明设置了缓存规则命中率还是上不去的案例最后发现是源站响应里带了Cache-Control: no-store或者Pragma: no-cache。这种情况下边缘节点会遵循源站的响应头你在Cloudflare这边规则设置得再激进也缓存不起来。所以排查缓存问题时第一件事就是打开开发者工具看响应头确认源站到底允许不允许缓存。2.3 WAF与安全防护在边缘拦截恶意流量Cloudflare的安全体系是它区别于普通CDN的核心价值之一。免费版就提供了基础的托管规则集可以拦截SQL注入、XSS等常见Web攻击的基础检测项。实际运维中我最常配置的安全能力有三个防火墙规则、速率限制、托管质询。防火墙规则是所见即所得的请求过滤器。我接过一个被刷接口的项目攻击者在一段时间内用大量来源IP请求注册接口导致源站CPU持续告警。我的处理方式是先看攻击流的特征——某个网络区域的IP段特别集中UA头也很规律于是配置了一条防火墙规则来源区域命中的请求、且请求路径为 /api/register 时执行质询动作把请求拦在边缘。效果立竿见影源站压力瞬间降下来。速率限制则更适合做细粒度的阈值控制。比如登录接口普通用户一分钟内的请求量不会很高我可以把它限制为每个IP每10秒最多5次请求。超过阈值的请求直接返回429状态码。配置时建议先开启模拟模式观察几天确认流量规律后再开启执行模式否则很容易误伤正常用户。这里必须提醒一个常见错误开启Under Attack Mode攻击模式后所有访问者都会看到一个检查浏览器的质询页对搜索引擎抓取和API调用影响很大。这个模式只适合在遭遇大规模攻击时临时开启攻击平息后要马上关掉。我见过有团队忘记关闭导致首页被搜索引擎收录成质询页自然流量掉了一大截。2.4 Workers在边缘运行代码Workers是我认为Cloudflare最接近操作系统气质的一块能力——它直接提供了一个在边缘节点运行代码的运行时环境。Workers程序的运行机制是这样的当你向某个开启了Worker路由的URL发起请求请求不是直接回源而是先被边缘节点的Workers运行时接管。你可以用JavaScript或WASM编写逻辑改写请求头、返回响应内容、做路由分发、调用外部API甚至实现一个完整的后端服务。和传统的FaaS函数即服务相比Workers最大的特点一是代码部署在边缘节点本身而不是集中在某个区域的云机房全球用户访问时的延迟更低二是冷启动时间极短因为V8引擎的启动开销比传统容器小得多。举一个我实际部署过的例子。之前一个项目需要在响应头里统一注入安全策略同时把 /old 路径的请求重定向到 /new。这种需求如果在Nginx里做就得改配置再reload在服务器上做还得注意和缓存层的顺序关系。用Workers就非常轻量export default { async fetch(request, env, ctx) { const url new URL(request.url); // 旧路径跳转 if (url.pathname /old) { return Response.redirect(new URL(/new, request.url), 301); } // 继续后续处理 const response await fetch(request); // 统一注入安全响应头 const newResponse new Response(response.body, response); if (response.headers.get(Content-Type)?.includes(text/html)) { newResponse.headers.set(X-Frame-Options, DENY); newResponse.headers.set(X-Content-Type-Options, nosniff); } return newResponse; } };部署后我把这个Worker绑定到根域名的路由上所有经过边缘节点的请求都会先执行这段逻辑。整个过程没有改一行Nginx配置没有重启任何服务上线和回滚都只需要在控制台点几下按钮。Workers免费版每天有10万次请求额度对于个人项目和早期产品完全够用。超过免费额度后按请求量计费价格也不高。不过要注意Workers在免费版存在CPU执行时间限制重计算的任务并不适合放到Workers里处理更适合的是那些轻逻辑、高频次的场景比如请求改写、鉴权校验、灰度分流。3. 从零搭建一次完整的Cloudflare基础设施配置3.1 域名接入与DNS迁移假设你手头有一个域名example.com源站部署在一台云服务器上IP假设为203.0.113.10接下来把这些都迁移到Cloudflare体系里。第一步是注册Cloudflare账号并添加站点。添加时平台会要求你输入根域名然后自动扫描当前DNS记录。扫描结果会以列表形式展示你需要核对一遍确保没有遗漏重要的记录——包括MX邮件记录、TXT验证记录、子域名A记录等。这一步我建议仔细些如果忘了把邮件记录加回来站点邮件服务会直接断掉。第二步是到域名注册商那边修改域名服务器Name Server。Cloudflare会分配两个NS地址给你类似xxx.ns.cloudflare.com。修改后DNS的权威解析就交给Cloudflare了。这里要强调NS切换不是即时的通常需要几个小时到48小时完全生效这期间新旧NS都可能被查询到属于正常现象。建议在业务低峰期操作并保留好注册商那里的原始NS信息万一需要回滚也好恢复。第三步是重新检查线上的解析记录把所有子域名的橙色云朵打开让流量走代理。开启代理后你可以到第三方DNS检测工具上看解析结果看到的不再是源站IP而是Cloudflare边缘节点的IP说明代理已经生效。3.2 缓存和TLS配置实操代理生效后我建议马上做两件事配TLS模式和开启强制HTTPS。Cloudflare的TLS模式有Flexible、Full、Full (strict) 三种。我自己的经验是只要源站支持HTTPS一律选Full (strict)。这个模式下Cloudflare边缘节点会用CA签发的证书去校验源站的SSL证书。如果源站证书过期或者域名不匹配请求会直接失败——这其实是好事因为能暴露源站证书配置的问题。Flexible模式虽然配置简单但用户到边缘走的是HTTPS边缘到源站却走HTTP中间这段明文传输风险较高我不推荐。开启强制HTTPS之后所有HTTP请求都会被301重定向到HTTPS。这个功能在SSL/TLS菜单里一键开启注意如果源站程序里自己做了同样的强制跳转可能出现重定向循环。排查方式是看响应头里的Location链条确认重定向只有一层。缓存规则方面我以一个典型博客站为例在缓存菜单里把静态资源子路径的Edge Cache TTL设置为30天动态页面设置成不缓存。再配合Cache Rules把首页API等动态接口单独配置。配置完成后建议先通过浏览器的开发者工具看响应头里的cf-cache-status字段字段为HIT表示命中缓存MISS表示未命中REVALIDATED表示回源校验后返回缓存内容。根据命中情况再调整策略这是最直接的调优手段。3.3 Workers路由绑定实操继续用3.1的站点场景。假设我想做一个环境判断功能访问admin.example.com时如果User-Agent里包含curl这种命令行工具就返回提示页面普通浏览器访问则正常转发到源站。先写一个Worker脚本功能非常简单export default { async fetch(request) { const url new URL(request.url); if (url.hostname admin.example.com) { const ua request.headers.get(User-Agent) || ; if (ua.includes(curl) || ua.includes(bot)) { return new Response(Access from CLI tools is not allowed., { status: 403 }); } } return fetch(request); } };在Workers控制台新建Worker把脚本粘贴进去保存并部署。然后进入触发事件页面添加一条路由规则admin.example.com/*关联到刚才创建的Worker。这样所有访问admin.example.com的请求都会先经过这段脚本逻辑再决定是否回源。我在实际部署中还习惯给Worker配置环境变量。比如上面这种场景可以把允许的UA白名单放到环境变量里避免每次改逻辑都要重新部署代码。Workers控制台支持在设置页配置变量在代码里通过env参数读取非常方便。需要注意变量的值会以明文形式存储敏感信息建议放到Secret类型的变量里。3.4 验证配置效果配置完成后验证环节不能省。我一般这么验证在浏览器访问站点首页打开开发者工具看响应头里的Server、cf-cache-status、CF-RAY等字段确认请求经过的是Cloudflare边缘节点。用dig命令检查解析结果确认IP是Cloudflare节点。在安全事件页面看是否有拦截日志观察规则是否按预期工作。如果开了缓存多刷新几次页面看cf-cache-status是否变成HIT。这一步做完整套基础设施就算基本跑通了。你会发现从DNS迁移到安全策略生效整个过程的控制点全在Cloudflare一个控制台里这正好呼应了OS的体验——系统资源统一管理向上提供一致的服务接口。4. 常见问题与排查技巧实录4.1 DNS改完半天不生效我遇到过好几次用户说我NS都改了一个晚上了怎么解析还是旧的。这里有个基本知识NS切换的生效时间取决于上一级域名的缓存TTL而多数域名后缀的NS记录TTL是固定的短则几小时长则48小时。所以改完NS后解析还没切过来不一定是配置错了耐心等就行。不过也要检查一下是否真的在注册商那里保存成功以及是否填了两个NS地址这两个是高频错误。如果域名已经在Cloudflare管理下你想调整某条记录生效时间通常很快。做法是修改记录前先把TTL降到60秒等生效后再调回300秒或自动。这个技巧在业务割接场景里非常实用。4.2 缓存命中率上不去缓存命中率低的排查路径我总结成一个固定套路先看响应头里的cf-cache-status和Cache-Control。如果每次都是MISS大概率是响应头不允许缓存检查源站是否返回了Set-Cookie、Cache-Control: private这类信号。如果命中率时高时低检查URL里是不是带了很多不同的查询参数考虑用Cache Key规则做归一化。最后再看缓存规则本身有没有覆盖到你的路径规则优先级没配好也会导致明明配了但不生效。我把常见的缓存排查点整理成了速查表现象可能原因处理方式全部请求MISS源站响应头禁止缓存检查Cache-Control与Set-CookieURL相同但参数变化大查询参数进入缓存键配置Cache Key忽略追踪参数规则设置了但没生效规则优先级冲突检查Cache Rules与Page Rules顺序静态资源命中率低未开启代理模式确认DNS记录云朵为橙色浏览器本地缓存未生效Browser Cache TTL过短调整浏览器缓存过期时间4.3 WAF误拦截正常请求WAF误拦截是另一个高发问题。常见的表现是用户在某个网络环境下访问网站突然看到一个请求被拒绝的页面而其他网络环境正常。排查步骤第一去安全事件里找到被拦截的请求看命中的规则ID。第二判断这个请求是否真的恶意。如果是正常的爬虫或者用户访问有两种处理一种是对特定IP或者网络区域加白名单另一种是给特定路径创建WAF豁免规则让该路径不执行某些敏感规则集。我个人的原则是安全规则尽量用质询而不是拦截作为动作先让可疑请求通过浏览器验证确认构成威胁再升级为拦截误伤率会低很多。4.4 Workers相关的典型问题Workers排障最常见的是三类问题执行超时、环境变量没读到、外部请求被CORS卡住。执行超时通常是脚本里做了重活比如循环解析大JSON、同步请求外部大文件。免费版对单次请求的CPU时间卡得很紧这类任务建议拆到后端服务去做Worker只做转发和轻量判断。环境变量问题一般是命名不一致注意在控制台设置的变量名要和代码里env字段完全对应。CORS问题常见于Worker作为API网关调用别的域接口需要在响应头里正确带上Access-Control-Allow-Origin等信息否则浏览器侧直接报跨域错误。5. 进阶方向与实操体会5.1 从Workers到Durable Objects与R2当你的应用状态变得复杂比如需要并发协调、持久化存储Workers本身不够用这时候可以了解Durable Objects和R2。Durable Objects提供了边缘侧的强一致性状态存储和有状态协调能力适合做WebSocket连接管理、协作编辑这类场景。R2则是兼容S3 API的对象存储可以直接在Workers里调用静态资源不再必须放在自己的服务器上。对我来说这两个产品补齐了边缘操作系统的存储和状态维度让整个平台离可以承载完整应用更近了一步。如果你已经习惯了把所有基础能力交给Cloudflare的思路再往上游走会非常自然。5.2 我在多个项目中的实操经验写到这里分享几个我更愿意强调的实操体会也是这几年反复踩过坑之后的总结。第一不要为了功能好看而把所有流量都开代理。像WebSocket长连接、大文件下载这类场景在默认代理配置下并不合适可能出现连接超时、回源失败等问题。更稳妥的做法是这类流量走仅DNS模式只把Web页面和API中的高频部分交给边缘节点。第二安全策略要遵循观察-测试-执行三步法。新规则上线先跑模拟模式看清拦截量和误伤面再逐步放开。直接上拦截动作往往会在深夜收到报警。第三免费版的实力有限但对于个人项目和MVP阶段完全够用。DNS、CDN、基础WAF、SSL托管这些核心能力都是免费提供的。等业务量起来后再按需升级付费套餐也不迟。最后再分享一个小技巧如果你只是要托管一个静态站点用Cloudflare Pages会比你维护一台服务器舒服得多。Pages支持直接从Git仓库构建部署自动生成预览环境上线前直接在分支里改代码就能看到效果。和我前面说的工作流一脉相承——简单的事情交给平台处理就对了。这套操作系统里还有更多值得玩的地方建议你先从自己的站点下手把DNS切过来、开上代理、配两条缓存规则跑两天看看效果再决定要不要把更多能力接进来。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。