为什么大家都在用 Cloudflare?从加速防护到 Workers 源码实战
Cloudflare 为什么越来越多人使用|附源码
在过去几年里,Cloudflare 的存在感越来越强。无论是个人开发者、独立站长、跨境电商团队,还是中大型企业,都开始把 Cloudflare 作为网站基础设施中的重要一环。很多人最初认识 Cloudflare,是因为它提供免费的 DNS 解析、CDN 加速和 DDoS 防护;但真正深入使用后会发现,Cloudflare 已经不只是一个“加速网站”的工具,而是逐渐发展成一个覆盖网络、安全、计算、存储、访问控制、边缘开发的综合平台。
本文将从实际使用角度,系统分析 Cloudflare 为什么越来越多人使用,并附上一些常见源码示例,包括 Cloudflare Workers 反向代理、接口缓存、简单 API 服务、图片代理等,帮助你快速理解它的价值。
一、Cloudflare 是什么?
Cloudflare 是一家提供网络基础设施和安全服务的公司。它最初以 CDN 和抗 DDoS 服务闻名,后来逐渐扩展出 DNS、WAF、Zero Trust、Workers、Pages、R2、D1、KV、Durable Objects 等一系列产品。
简单来说,Cloudflare 可以帮助你完成以下事情:
- 让网站访问更快;
- 保护网站免受攻击;
- 提供稳定且快速的 DNS 解析;
- 隐藏源站服务器 IP;
- 在全球边缘节点运行代码;
- 构建无服务器应用;
- 管理团队访问权限;
- 部署前端项目;
- 存储静态资源、对象文件和数据库数据。
以前搭建一个网站,需要购买服务器、配置 Nginx、配置 SSL、设置防火墙、部署后端服务、处理缓存和安全问题。现在,Cloudflare 把很多底层基础设施能力抽象成了平台服务,让开发者能够更专注于业务本身。
二、为什么越来越多人使用 Cloudflare?
1. 免费套餐足够强大
Cloudflare 最大的吸引力之一,就是免费套餐非常实用。
对于个人网站、博客、小型项目而言,Cloudflare 免费版已经包含:
- 免费 DNS 解析;
- 免费 CDN;
- 免费 HTTPS 证书;
- 基础 DDoS 防护;
- 页面规则;
- Workers 免费额度;
- Zero Trust 部分免费功能;
- 基础 WAF 规则;
- 全球边缘网络加速。
很多同类服务要么收费较高,要么免费版限制明显,而 Cloudflare 的免费额度对普通开发者非常友好。这也是为什么许多站长在部署网站时,会优先选择把域名接入 Cloudflare。
2. DNS 解析速度快且稳定
DNS 是互联网访问链路中的第一步。一个网站如果 DNS 不稳定,即使服务器再强,也会影响用户访问。
Cloudflare 的 DNS 服务以速度快、稳定性好著称。用户只需要把域名的 NS 服务器切换到 Cloudflare,就可以在 Cloudflare 控制台中统一管理 DNS 记录。
常见的 DNS 记录包括:
A example.com 192.0.2.1
CNAME www example.com
MX mail mail.example.com
TXT example.com v=spf1 include:_spf.example.com ~all
在 Cloudflare 中,还可以开启“小云朵”代理模式。开启代理后,用户访问网站时,请求会先经过 Cloudflare,再转发到源站服务器。这样可以起到隐藏源站 IP、缓存静态资源、过滤恶意请求等作用。
3. CDN 加速覆盖全球
Cloudflare 在全球拥有大量边缘节点。当网站接入 Cloudflare 后,静态资源可以被缓存到离用户更近的节点上。
比如,一个中国香港服务器上的网站,用户从美国、欧洲、东南亚访问时,如果每次都回源到香港服务器,延迟会比较高。使用 Cloudflare 后,图片、CSS、JavaScript 等静态资源可以在边缘节点缓存,用户访问时直接从附近节点获取,响应速度明显提升。
CDN 的核心价值包括:
- 降低源站压力;
- 提升全球访问速度;
- 节省服务器带宽;
- 减少网络波动影响;
- 提升大流量访问时的稳定性。
对于内容型网站、博客、软件下载站、文档站点来说,CDN 的价值非常明显。
4. 自动 HTTPS,非常方便
以前给网站配置 HTTPS 需要手动申请证书、部署证书、定期续期。对于新手来说,证书配置经常是一个麻烦点。
Cloudflare 接入域名后,可以自动提供 SSL/TLS 支持。用户可以在后台选择不同的加密模式:
- Off:不启用 HTTPS;
- Flexible:用户到 Cloudflare 使用 HTTPS,Cloudflare 到源站使用 HTTP;
- Full:用户到 Cloudflare 使用 HTTPS,Cloudflare 到源站也使用 HTTPS;
- Full Strict:严格验证源站证书。
一般建议使用 Full 或 Full Strict。如果源站也配置了可信证书,推荐使用 Full Strict,安全性更高。
5. DDoS 防护能力强
DDoS 攻击是很多站长和企业都会遇到的问题。攻击者通过大量请求占满服务器带宽或计算资源,导致正常用户无法访问网站。
Cloudflare 以抗 DDoS 能力闻名。即使是免费版,也具备基础 DDoS 防护能力。对于大流量攻击,Cloudflare 可以在边缘网络层面进行清洗,而不是让攻击流量直接打到源站。
常见防护方式包括:
- IP 信誉识别;
- 挑战页面;
- Bot 检测;
- 速率限制;
- WAF 规则;
- JS Challenge;
- Turnstile 验证码;
- 自定义防火墙规则。
对于小团队来说,自建抗 DDoS 基础设施几乎不现实,而 Cloudflare 让这件事变得简单很多。
6. WAF 防护降低安全风险
WAF,即 Web Application Firewall,中文常称为 Web 应用防火墙。它可以帮助网站拦截常见攻击,例如:
- SQL 注入;
- XSS 跨站脚本;
- 文件包含;
- 路径遍历;
- 恶意爬虫;
- 异常 User-Agent;
- 高频请求;
- 已知漏洞扫描。
很多网站本身并没有完善的安全防护,尤其是使用 WordPress、Discuz、Typecho、ThinkPHP 等程序的网站。一旦程序或插件存在漏洞,就可能被扫描器批量攻击。
Cloudflare 的 WAF 可以在请求进入源站之前进行过滤,减少源站暴露风险。
三、Cloudflare Workers:让边缘节点运行代码
Cloudflare Workers 是很多开发者喜欢 Cloudflare 的重要原因。它允许你在 Cloudflare 的全球边缘节点上运行 JavaScript/TypeScript 代码。
你可以把 Workers 理解成一种边缘无服务器计算平台。它不需要你购买服务器,不需要配置环境,也不需要维护操作系统。你只需要写代码,然后部署到 Cloudflare,用户请求就会在离用户最近的节点被处理。
Workers 常见用途包括:
- 反向代理;
- API 聚合;
- 接口缓存;
- 请求鉴权;
- 图片代理;
- A/B 测试;
- 短链接服务;
- Webhook 转发;
- 静态资源处理;
- 简单后端服务。
四、源码示例一:Cloudflare Workers 返回 JSON API
下面是一个最简单的 Workers API 示例。
export default {
async fetch(request, env, ctx) {
const data = {
code: 0,
message: "Hello Cloudflare Workers",
time: new Date().toISOString(),
ip: request.headers.get("cf-connecting-ip"),
country: request.cf?.country || "unknown"
};
return new Response(JSON.stringify(data, null, 2), {
headers: {
"Content-Type": "application/json; charset=utf-8"
}
});
}
};
这个 Worker 会返回一段 JSON 数据,其中包含当前时间、用户 IP 和访问国家代码。
返回效果类似:
{
"code": 0,
"message": "Hello Cloudflare Workers",
"time": "2026-06-05T10:00:00.000Z",
"ip": "203.0.113.10",
"country": "US"
}
这个例子虽然简单,但它展示了 Workers 的基本能力:你可以直接在边缘节点处理请求,而不需要源站服务器。
五、源码示例二:Workers 反向代理
很多人使用 Workers 来做反向代理。下面是一个基础版本,把访问 Worker 的请求转发到目标网站。
const TARGET = "https://example.com";
export default {
async fetch(request) {
const url = new URL(request.url);
const targetUrl = new URL(TARGET);
url.protocol = targetUrl.protocol;
url.hostname = targetUrl.hostname;
url.port = targetUrl.port;
const newRequest = new Request(url.toString(), {
method: request.method,
headers: request.headers,
body: request.method === "GET" || request.method === "HEAD" ? null : request.body,
redirect: "manual"
});
const response = await fetch(newRequest);
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: response.headers
});
}
};
这个代码会把 Worker 收到的请求转发到 https://example.com。如果你访问:
https://worker.your-domain.com/path?a=1
实际会转发到:
https://example.com/path?a=1
需要注意的是,反向代理应遵守目标站点规则和相关法律法规,不要用于绕过权限控制或访问限制。
六、源码示例三:带缓存的 API 代理
对于一些第三方 API,如果每次都直接请求源接口,不仅慢,还可能触发频率限制。我们可以用 Workers 做一层缓存。
const API_URL = "https://api.github.com/repos/cloudflare/workers-sdk";
const CACHE_TTL = 300;
export default {
async fetch(request, env, ctx) {
const cache = caches.default;
const cacheKey = new Request(request.url, request);
let response = await cache.match(cacheKey);
if (response) {
return addHeader(response, "HIT");
}
response = await fetch(API_URL, {
headers: {
"User-Agent": "Cloudflare-Worker-Demo"
}
});
const data = await response.text();
const cachedResponse = new Response(data, {
status: response.status,
headers: {
"Content-Type": "application/json; charset=utf-8",
"Cache-Control": `public, max-age=${CACHE_TTL}`,
"X-Cache-Status": "MISS"
}
});
ctx.waitUntil(cache.put(cacheKey, cachedResponse.clone()));
return cachedResponse;
}
};
function addHeader(response, status) {
const newResponse = new Response(response.body, response);
newResponse.headers.set("X-Cache-Status", status);
return newResponse;
}
这个例子中,第一次访问会请求 GitHub API,并把结果缓存 300 秒。后续请求会直接从 Cloudflare 边缘缓存返回,减少源接口压力。
这种方式适合:
- 天气接口;
- 汇率接口;
- 新闻接口;
- GitHub 项目信息;
- 商品价格接口;
- 低频更新的数据接口。
七、源码示例四:图片代理与防盗链
有些网站希望对图片请求进行代理,避免直接暴露原始图片地址,同时可以增加简单的防盗链逻辑。
const ALLOWED_REFERERS = [
"https://example.com",
"https://www.example.com"
];
export default {
async fetch(request) {
const url = new URL(request.url);
const imageUrl = url.searchParams.get("url");
if (!imageUrl) {
return new Response("Missing image url", { status: 400 });
}
const referer = request.headers.get("referer") || "";
const allowed = ALLOWED_REFERERS.some(domain => referer.startsWith(domain));
if (!allowed) {
return new Response("Forbidden", { status: 403 });
}
if (!/^https?:\/\//i.test(imageUrl)) {
return new Response("Invalid image url", { status: 400 });
}
const response = await fetch(imageUrl);
const contentType = response.headers.get("Content-Type") || "";
if (!contentType.startsWith("image/")) {
return new Response("Not an image", { status: 400 });
}
return new Response(response.body, {
headers: {
"Content-Type": contentType,
"Cache-Control": "public, max-age=86400"
}
});
}
};
访问方式:
https://img.example.com/?url=https://example-cdn.com/photo.jpg
这个 Worker 做了几件事:
- 读取 URL 参数中的图片地址;
- 检查 Referer 是否来自允许的域名;
- 判断目标地址是否合法;
- 请求图片并返回;
- 设置缓存时间为一天。
实际生产环境中,还可以增加签名校验,避免图片代理被滥用。
八、源码示例五:简单短链接服务
Cloudflare Workers 配合 KV 可以做短链接服务。假设 KV 命名空间绑定名为 LINKS。
wrangler.toml 示例
name = "short-link-worker"
main = "src/index.js"
compatibility_date = "2026-06-05"
kv_namespaces = [
{ binding = "LINKS", id = "your_kv_namespace_id" }
]
Worker 源码
export default {
async fetch(request, env) {
const url = new URL(request.url);
const path = url.pathname.replace("/", "");
if (request.method === "POST" && url.pathname === "/create") {
return createShortLink(request, env);
}
if (!path) {
return new Response("Short Link Service", {
headers: { "Content-Type": "text/plain; charset=utf-8" }
});
}
const target = await env.LINKS.get(path);
if (!target) {
return new Response("Link not found", { status: 404 });
}
return Response.redirect(target, 302);
}
};
async function createShortLink(request, env) {
const body = await request.json();
const target = body.url;
if (!target || !/^https?:\/\//i.test(target)) {
return new Response("Invalid URL", { status: 400 });
}
const code = Math.random().toString(36).slice(2, 8);
await env.LINKS.put(code, target);
return new Response(JSON.stringify({
code,
shortUrl: `/` + code,
target
}), {
headers: {
"Content-Type": "application/json; charset=utf-8"
}
});
}
创建短链接请求示例:
curl -X POST https://s.example.com/create \
-H "Content-Type: application/json" \
-d '{"url":"https://www.cloudflare.com"}'
返回结果:
{
"code": "abc123",
"shortUrl": "/abc123",
"target": "https://www.cloudflare.com"
}
之后访问:
https://s.example.com/abc123
就会跳转到目标地址。
九、Cloudflare Pages:前端项目部署更简单
除了 Workers,Cloudflare Pages 也非常受欢迎。它适合部署静态网站和前端项目,例如:
- Vue;
- React;
- Next.js;
- Astro;
- Vite;
- Hugo;
- Hexo;
- Docusaurus;
- Nuxt 静态站点。
Cloudflare Pages 可以直接连接 GitHub 或 GitLab 仓库。当你推送代码后,它会自动构建并部署。
例如一个 Vite 项目,构建命令通常是:
npm install
npm run build
输出目录:
dist
对于个人博客、文档站点、项目官网来说,Cloudflare Pages 的体验非常好:部署简单、访问速度快、自动 HTTPS、支持自定义域名,而且免费额度足够使用。
十、Cloudflare R2:无出口流量费的对象存储
Cloudflare R2 是类似 Amazon S3 的对象存储服务。它最大的卖点之一是没有传统意义上的出口流量费,这对图片站、下载站、备份系统非常有吸引力。
R2 适合存储:
- 图片;
- 视频;
- 软件包;
- 日志文件;
- 备份文件;
- 静态资源;
- 用户上传文件。
如果你的网站有大量静态文件分发需求,使用 R2 配合 Cloudflare CDN,成本可能比传统云存储更可控。
十一、Zero Trust:适合团队远程访问
Cloudflare Zero Trust 是面向企业和团队的安全访问方案。它可以让团队成员安全访问内部系统,而不需要传统 VPN。
例如,公司内部有一个管理后台,不希望暴露给公网,但又希望员工在家办公时能够访问。传统做法可能是搭建 VPN,而 Cloudflare Access 可以通过身份认证、邮箱验证、单点登录等方式进行访问控制。
常见应用场景包括:
- 内部管理后台;
- Jenkins;
- GitLab;
- Grafana;
- 数据库管理面板;
- 公司文档系统;
- 内部 API;
- 远程桌面和 SSH 访问。
对于远程办公团队来说,这类功能可以大幅降低网络安全管理成本。
十二、使用 Cloudflare 需要注意什么?
虽然 Cloudflare 很强大,但也不是所有场景都适合无脑使用。
1. 不要把它当作万能加速器
Cloudflare 对全球访问优化明显,但不同地区、不同运营商的实际表现可能不同。尤其是某些地区网络环境复杂,实际访问速度需要测试。
2. SSL 模式要正确配置
不要长期使用 Flexible 模式。因为这种模式下 Cloudflare 到源站之间是 HTTP,仍然存在安全风险。推荐使用 Full Strict。
3. 源站安全仍然重要
即使接入 Cloudflare,也不能忽略源站安全。你仍然应该:
- 关闭不必要端口;
- 设置服务器防火墙;
- 限制源站只允许 Cloudflare IP 访问;
- 定期更新系统和程序;
- 使用强密码和密钥登录;
- 做好数据备份。
4. Workers 滥用可能导致限制
Workers 虽然好用,但不要用于违规代理、大规模爬虫、绕过访问控制等行为。合理使用才能长期稳定。
十三、如何快速接入 Cloudflare?
基本流程如下:
- 注册 Cloudflare 账号;
- 添加你的域名;
- Cloudflare 扫描 DNS 记录;
- 确认 DNS 记录是否正确;
- 到域名注册商处修改 NS 服务器;
- 等待 DNS 生效;
- 开启 SSL/TLS;
- 配置缓存规则和安全规则;
- 根据需要启用 Workers、Pages、R2 等服务。
如果只是一个普通网站,接入过程通常十几分钟就可以完成。
十四、总结
Cloudflare 越来越多人使用,并不是偶然。它解决了很多网站和应用在真实运行中都会遇到的问题:访问速度、安全防护、证书管理、DNS 稳定性、DDoS 攻击、全球分发、无服务器计算、对象存储和团队访问控制。
对于个人开发者来说,Cloudflare 的免费套餐和 Workers 能力非常有吸引力,可以低成本构建很多实用工具;对于企业来说,Cloudflare 提供了完善的安全和网络基础设施,可以降低运维复杂度,提高系统稳定性。
如果你只是搭建一个博客,Cloudflare 可以帮你做 DNS、HTTPS、CDN 和安全防护;如果你是开发者,Workers、Pages、KV、R2、D1 可以让你快速构建边缘应用;如果你是团队管理者,Zero Trust 可以帮助你更安全地管理内部系统访问。
一句话总结:Cloudflare 受欢迎的原因,不只是因为它免费,而是因为它把复杂的网络基础设施变得简单、可靠且可扩展。对于现代 Web 项目来说,它已经从一个“可选工具”逐渐变成了很多人的“默认配置”。