FREE TIER · 完全免费 · 无需信用卡
Cloudflare 免费资源 完全指南
Cloudflare 提供业界最慷慨的免费套餐之一,涵盖 CDN、DNS、边缘函数、对象存储、数据库等,帮助开发者零成本构建生产级应用。
7+
免费产品
10万
Workers 每日请求
10GB
R2 免费存储
∞
DNS 查询次数
| 产品 | 免费额度 | 适用场景 | 限制 |
|---|---|---|---|
| 🚇 Tunnel | 完全免费 | 本地服务暴露公网 | 无带宽限制 |
| 📄 Pages | 500 次构建/月 | 静态前端部署 | 单次构建 20min |
| ⚡ Workers | 10万 请求/天 | 边缘函数/API代理 | CPU 10ms/请求 |
| 🪣 R2 | 10GB 存储 | 文件/图片存储 | 100万次读/月 |
| 🗄️ D1 | 5GB + 500万读/天 | 轻量级数据库 | 10万写/天 |
| 🔒 Zero Trust | 50 用户 | 内部系统认证 | 基础功能 |
| 🌐 DNS | 完全免费 | 域名解析 | 无限查询 |
| 🛡️ CDN/WAF | 无限请求 | 加速+防护 | 基础规则5条 |
1
注册 Cloudflare 账号
访问
cloudflare.com 注册账号,免费套餐无需绑定信用卡。注册后即可使用 DNS、CDN、Pages 等基础功能。2
安装 Wrangler CLI(官方工具)
Wrangler 是 Cloudflare 官方命令行工具,用于部署 Workers、Pages、R2、D1 等所有产品。
BASH
# 安装 wrangler npm install -g wrangler # 验证安装 wrangler --version # 登录账号(会打开浏览器授权) wrangler login
3
安装 cloudflared(Tunnel 专用)
如果需要用 Tunnel 把本地服务暴露到公网,需要额外安装 cloudflared。
BASH
# macOS brew install cloudflared # Windows (使用 winget) winget install Cloudflare.cloudflared # Linux (Debian/Ubuntu) curl -L --output cloudflared.deb \ https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb sudo dpkg -i cloudflared.deb # 登录 cloudflared tunnel login
核心价值:本地开发中的 Spring Boot(8080 端口)、数据库管理页面、内部工具,都可以通过 Tunnel 生成一个
xxx.trycloudflare.com 公网地址,分享给任何人访问,完全免费。方式一:临时快速隧道(无需登录)
最简单的方式,一条命令生成临时公网地址(重启后地址会变):
BASH · 临时隧道
# 把本地 8080 端口暴露到公网(无需登录) cloudflared tunnel --url http://localhost:8080 # 把本地 80 端口暴露(前端) cloudflared tunnel --url http://localhost:80 # 把本地 3000 端口暴露(H5端) cloudflared tunnel --url http://localhost:3000
运行后终端会输出类似
https://random-name.trycloudflare.com 的地址,复制给他人即可访问你的本地服务。方式二:固定隧道(需要域名)
如果有自己的域名,可以配置固定地址的隧道:
1
创建命名隧道
BASH
# 创建隧道(命名为 my-app) cloudflared tunnel create my-app # 查看已创建的隧道 cloudflared tunnel list
2
创建配置文件
YAML · ~/.cloudflared/config.yml
tunnel: my-app credentials-file: /Users/你的用户名/.cloudflared/<隧道ID>.json ingress: # 前端 - hostname: app.yourdomain.com service: http://localhost:80 # 后端 API - hostname: api.yourdomain.com service: http://localhost:8080 # H5小程序 - hostname: h5.yourdomain.com service: http://localhost:3000 # 兜底规则(必须有) - service: http_status:404
3
绑定 DNS 并启动
BASH
# 创建 DNS 记录(关联到你的域名) cloudflared tunnel route dns my-app app.yourdomain.com cloudflared tunnel route dns my-app api.yourdomain.com # 启动隧道 cloudflared tunnel run my-app # 或者在后台运行(macOS 使用 launchd) cloudflared service install
固定隧道需要你的域名已托管在 Cloudflare(在 Cloudflare 修改 DNS Nameserver),才能创建 CNAME 记录。
Git 自动部署
连接 GitHub/GitLab 仓库,push 代码自动触发构建部署
500 次构建/月
全球 CDN
200+ 个边缘节点,静态资源就近分发,访问速度极快
无限请求
自动 HTTPS
自动签发 SSL 证书,支持自定义域名绑定
免费证书
预览部署
每个 PR/分支自动生成预览链接,方便测试
无限预览
方式一:CLI 直接部署
BASH · Vue 项目部署示例
# 1. 进入前端目录并构建 cd ruoyi-ui npm run build:prod # 2. 登录 Cloudflare(首次) wrangler login # 3. 创建项目并部署(交互式) wrangler pages deploy dist # 4. 指定项目名称部署 wrangler pages deploy dist --project-name=fund-supervision # 查看已部署的项目 wrangler pages project list
方式二:连接 Git 仓库(推荐)
1
在 Cloudflare Dashboard 创建 Pages 项目
登录 dash.cloudflare.com → Workers & Pages → Create → Pages → Connect to Git
2
配置构建设置
配置参数
框架预设: Vue 构建命令: npm run build:prod 构建输出目录: dist 根目录: ruoyi-ui Node 版本: 18
3
绑定自定义域名(可选)
项目设置 → Custom Domains → 添加你的域名,Cloudflare 自动配置 DNS 和 HTTPS。
Pages Functions(边缘后端)
在 Pages 项目中创建 /functions 目录,可以添加服务端逻辑:
JS · functions/api/hello.js
// 访问 /api/hello 自动调用此函数 export async function onRequest(context) { return new Response(JSON.stringify({ message: 'Hello from Cloudflare Edge!', region: context.request.cf?.country }), { headers: { 'Content-Type': 'application/json' } }); }
Workers 可以做 API 代理、跨域处理、请求路由、数据转换、鉴权中间件等,是比传统 Serverless 更轻量的解决方案。
BASH · 创建第一个 Worker
# 创建新 Worker 项目 wrangler init my-worker cd my-worker # 本地开发预览 wrangler dev # 部署到生产 wrangler deploy
实用示例:API 代理 + CORS 处理
JS · src/index.js
export default { async fetch(request, env) { const url = new URL(request.url); // 处理预检请求 if (request.method === 'OPTIONS') { return new Response(null, { headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE', 'Access-Control-Allow-Headers': 'Content-Type,Authorization' } }); } // 代理请求到你的后端 const backendUrl = `https://your-api.com` + url.pathname; const response = await fetch(backendUrl, { method: request.method, headers: request.headers, body: request.body }); // 添加 CORS 响应头 const newResponse = new Response(response.body, response); newResponse.headers.set('Access-Control-Allow-Origin', '*'); return newResponse; } };
Workers 常见使用场景
🔀
API 路由与代理
统一入口代理多个后端服务,添加鉴权、日志、限速
🌐
跨域(CORS)处理
为第三方 API 添加 CORS 头,解决前端跨域问题
🔑
JWT / Token 验证
在边缘层验证用户身份,不到达源服务器即可拦截
⚡
响应缓存
缓存 API 响应,减少后端压力,降低延迟
🤖
AI API 中转
代理 OpenAI/Claude 等 AI API,解决国内访问问题
📧
Webhook 处理
接收 GitHub/Stripe 等平台的 Webhook,转发处理
免费存储
10GB 免费存储空间
10 GB / 月
免费读取
Class B 操作(GET/HEAD)
1,000 万次 / 月
免费写入
Class A 操作(PUT/POST)
100 万次 / 月
零出站费
数据传输到用户无任何费用
完全免费 ✅
BASH · 创建 R2 存储桶
# 创建存储桶 wrangler r2 bucket create my-bucket # 查看存储桶列表 wrangler r2 bucket list # 上传文件 wrangler r2 object put my-bucket/path/to/file.jpg --file=./local-file.jpg # 下载文件 wrangler r2 object get my-bucket/path/to/file.jpg --file=./download.jpg # 删除文件 wrangler r2 object delete my-bucket/path/to/file.jpg
在 Worker 中使用 R2(存储上传文件)
JS · Worker + R2 文件上传
// wrangler.toml 中绑定 R2 桶 // [[r2_buckets]] // binding = "MY_BUCKET" // bucket_name = "my-bucket" export default { async fetch(request, env) { const url = new URL(request.url); const key = url.pathname.slice(1); // /filename → filename if (request.method === 'PUT') { // 上传文件 await env.MY_BUCKET.put(key, request.body, { httpMetadata: { contentType: request.headers.get('Content-Type') } }); return new Response(`上传成功:${key}`); } if (request.method === 'GET') { // 下载文件 const object = await env.MY_BUCKET.get(key); if (!object) return new Response('文件不存在', { status: 404 }); return new Response(object.body, { headers: { 'Content-Type': object.httpMetadata.contentType } }); } } };
使用 AWS S3 SDK 操作 R2
R2 完全兼容 S3 API,Java 后端可直接使用 AWS SDK:
JAVA · Spring Boot 集成 R2
// pom.xml 添加依赖 // <dependency> // <groupId>software.amazon.awssdk</groupId> // <artifactId>s3</artifactId> // </dependency> S3Client s3 = S3Client.builder() .endpointOverride(URI.create( "https://<accountId>.r2.cloudflarestorage.com")) .credentialsProvider(StaticCredentialsProvider.create( AwsBasicCredentials.create( "ACCESS_KEY_ID", "SECRET_ACCESS_KEY"))) .region(Region.of("auto")) .build(); // 上传文件 s3.putObject(PutObjectRequest.builder() .bucket("my-bucket") .key("uploads/file.jpg") .build(), Paths.get("/local/file.jpg"));
| 指标 | 免费额度 | 付费套餐 |
|---|---|---|
| 存储容量 | 5 GB | $0.75/GB-月 |
| 读取行数 | 500 万行/天 | $0.001/百万行 |
| 写入行数 | 10 万行/天 | $1.00/百万行 |
| 数据库数量 | 500 个 | 无上限 |
BASH · 创建和操作 D1 数据库
# 创建数据库 wrangler d1 create my-database # 执行 SQL(创建表) wrangler d1 execute my-database --command=" CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); " # 插入数据 wrangler d1 execute my-database \ --command="INSERT INTO users (name, email) VALUES ('张三', 'zhang@example.com')" # 查询数据 wrangler d1 execute my-database --command="SELECT * FROM users" # 执行 SQL 文件 wrangler d1 execute my-database --file=./schema.sql
JS · Worker 中查询 D1
// wrangler.toml 中绑定 D1 // [[d1_databases]] // binding = "DB" // database_name = "my-database" // database_id = "xxx-xxx-xxx" export default { async fetch(request, env) { // 查询用户列表 const { results } = await env.DB .prepare("SELECT * FROM users WHERE id = ?") .bind(1) .all(); // 插入数据 await env.DB .prepare("INSERT INTO users (name, email) VALUES (?, ?)") .bind("李四", "li@example.com") .run(); return Response.json(results); } };
核心场景:你用 Tunnel 把内部管理系统暴露到公网后,可以用 Zero Trust Access 添加 Google/GitHub/邮件 OTP 登录保护,只有授权用户才能访问,完全免费(≤50人)。
1
开启 Zero Trust
访问
one.dash.cloudflare.com → 选择账号 → 设置 Team Name(如:myteam)2
配置身份提供商(IdP)
Settings → Authentication → 添加 GitHub/Google/一次性邮件验证码 作为登录方式,无需代码修改。
3
创建 Access 策略保护应用
配置示例
应用名称: 养老机构管理系统 应用域名: admin.yourdomain.com 访问策略: - Allow: 邮件域 @yourcompany.com - Allow: 指定邮件 admin@gmail.com - Deny: 其他所有人
4
结合 Tunnel 使用
在隧道的 Public Hostname 设置中,将 Access 策略关联到对应的主机名,访问该地址时自动弹出身份验证页面。
BASH · 用 CLI 管理 DNS
# 列出所有 DNS 记录 wrangler dns list --zone=yourdomain.com # 添加 A 记录(指向 IP) wrangler dns create yourdomain.com \ --type=A --name=www --content=1.2.3.4 # 添加 CNAME 记录(指向域名) wrangler dns create yourdomain.com \ --type=CNAME --name=api --content=your-server.example.com # 添加 MX 记录(邮件) wrangler dns create yourdomain.com \ --type=MX --name=@ --content=mail.example.com --priority=10
将域名 NS 服务器改为 Cloudflare 后,DNS 记录的橙色云朵图标(代理模式)会让你的源 IP 被隐藏,同时享受 CDN 加速和 DDoS 防护。
CDN 加速
200+ 节点缓存静态资源,全球访问提速 30-60%
免费 · 无限流量
DDoS 防护
自动检测并缓解 L3/L4/L7 层攻击
免费 · 无限制
SSL/TLS 证书
自动签发维护证书,支持通配符域名
免费 HTTPS
WAF 规则
自定义防火墙规则,拦截恶意请求
5 条规则(免费)
常用 WAF 规则示例
Cloudflare WAF 规则表达式
# 封禁特定国家访问(仅允许中国大陆) not (ip.geoip.country in {"CN" "HK" "TW"}) # 封禁已知恶意机器人 (cf.client.bot) # 限制 API 路径只允许特定 IP (http.request.uri.path contains "/admin") and not ip.src in {1.2.3.4 5.6.7.8} # 拦截 SQL 注入尝试 (http.request.uri.query contains "UNION SELECT") or (http.request.uri.query contains "' OR 1=1")
🏠
本地开发演示
Tunnel 快速隧道
一条命令生成公网地址
分享给客户/同事
一条命令生成公网地址
分享给客户/同事
🌐
前端部署
Pages + 自定义域名
Git 推送自动部署
全球 CDN 加速
Git 推送自动部署
全球 CDN 加速
🔌
API 服务
Workers + D1
边缘函数处理请求
轻量级数据持久化
边缘函数处理请求
轻量级数据持久化
📁
文件存储
R2 + Workers
图片/附件免费存储
无出站流量费
图片/附件免费存储
无出站流量费
🏢
内部系统
Tunnel + Zero Trust
安全暴露内部工具
SSO 统一认证
安全暴露内部工具
SSO 统一认证
🛡️
网站防护
DNS 代理 + WAF
DDoS 防护 + HTTPS
隐藏真实服务器 IP
DDoS 防护 + HTTPS
隐藏真实服务器 IP
零成本全栈方案:Pages(前端)+ Workers(API)+ D1(数据库)+ R2(存储)完全免费,可以支撑相当规模的中小型应用,月活 10 万以内完全够用。
BASH · 一键部署全栈应用
# 全栈项目结构 my-app/ ├── frontend/ # → Cloudflare Pages ├── functions/ # → Cloudflare Pages Functions ├── workers/ # → Cloudflare Workers ├── migrations/ # → Cloudflare D1 数据库迁移 └── wrangler.toml # → 统一配置文件 # wrangler.toml 完整示例 name = "my-app" compatibility_date = "2024-01-01" [[d1_databases]] binding = "DB" database_name = "my-db" database_id = "your-db-id" [[r2_buckets]] binding = "STORAGE" bucket_name = "my-storage" # 部署所有内容 wrangler deploy