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 加速
🔌
API 服务
Workers + D1
边缘函数处理请求
轻量级数据持久化
📁
文件存储
R2 + Workers
图片/附件免费存储
无出站流量费
🏢
内部系统
Tunnel + Zero Trust
安全暴露内部工具
SSO 统一认证
🛡️
网站防护
DNS 代理 + WAF
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