首页 > > Cloudflare 免费工具箱:零成本搭建个人图床、短链与 API 网关

Cloudflare 免费工具箱:零成本搭建个人图床、短链与 API 网关

GK • 更新于 2026年9月17日

Cloudflare 免费额度一览:CDN、Tunnel、R2、Workers、D1

一句话:Cloudflare 的免费套餐不只是 CDN。
Tunnel 做内网穿透、R2 存文件、Workers 跑后端逻辑、D1 当数据库——四个产品串起来,可以零成本搭一个完整的个人基础设施。不需要买 VPS,不需要公网 IP,不需要配 Nginx 反代,一个 Cloudflare 账号全搞定。

这张免费桌子有多大

先看 Cloudflare 免费套餐给的东西。这些不是”试用额度”——是持续免费的正式套餐。对于个人项目和中小站点来说,大多数场景根本碰不到上限:

产品 免费额度 能干什么
CDN + DNS 不限流量 全球加速 + DDoS 防护
Tunnel 完全免费 内网穿透,无需公网 IP
R2 存储 10 GB / 月 图床、静态资源、备份
Workers 10 万请求 / 天 短链、API 代理、表单处理
D1 数据库 5 GB 存储 边缘 SQLite,和 Workers 原生集成

关键点:Tunnel 完全免费,不走流量计费。R2 和 D1 的免费额度对于个人项目几乎不可能用超。Workers 10 万/天对一个个人博客的短链服务绰绰有余——大部分个人项目的 Workers 日请求量在几百到几千之间。

项目一:零成本个人图床

用 R2 存图片,Workers 做上传 API,Tunnel 暴露本地管理面板。

架构

浏览器上传 → Workers API(鉴权+写 R2) → R2 Bucket(存储)
外网访问 → img.yourdomain.com → R2 公开读取

Step 1:创建 R2 Bucket

CF 控制台 → R2 → Create Bucket → 命名为 my-images。默认就是公开可读。绑定自定义域名 img.yourdomain.com 后,每个文件自动获得一个 CDN 加速的 URL:

https://img.yourdomain.com/screenshots/2026/nginx-config.png

Step 2:Workers 上传接口

创建一个 Worker,10 行代码搞定文件上传:

export default {
  async fetch(request, env) {
    // 简单 token 鉴权
    const token = request.headers.get('X-Upload-Token');
    if (token !== env.UPLOAD_SECRET) {
      return new Response('Unauthorized', { status: 401 });
    }

    if (request.method === 'PUT') {
      const url = new URL(request.url);
      const key = url.pathname.slice(1);   // /screenshots/foo.png → key
      await env.MY_BUCKET.put(key, request.body);
      return new Response(`https://img.yourdomain.com/${key}`, { status: 201 });
    }

    return new Response('PUT to upload', { status: 405 });
  }
}

Worker 里绑定 R2 bucket(MY_BUCKET)和设置环境变量 UPLOAD_SECRET 都在 CF 控制台完成,不需要改代码。绑定后 Worker 自动能读写 R2,比配 S3 SDK 省心得多。

Step 3:本地用 curl 上传

$ curl -X PUT 
  -H "X-Upload-Token: your-secret-token" 
  --data-binary @screenshot.png 
  https://upload.yourdomain.com/screenshots/nginx-config.png

# 返回:
https://img.yourdomain.com/screenshots/nginx-config.png

还可以集成到 macOS 的 Shortcuts 或 Raycast 里,截图 → 一键上传 → 自动复制 URL 到剪贴板。

项目二:短链服务

用 Workers + D1 做一个短链系统,核心逻辑 30 行:

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const slug = url.pathname.slice(1);

    if (request.method === 'POST') {
      // 创建短链
      const { target } = await request.json();
      const id = crypto.randomUUID().slice(0, 6);
      await env.DB.prepare(
        'INSERT INTO links (id, target) VALUES (?, ?)'
      ).bind(id, target).run();
      return Response.json({ short: `https://s.yourdomain.com/${id}` });
    }

    // 重定向
    const row = await env.DB.prepare(
      'SELECT target FROM links WHERE id = ?'
    ).bind(slug).first();

    if (row) return Response.redirect(row.target, 301);
    return new Response('Not found', { status: 404 });
  }
}

D1 建表只需要一条 SQL:

CREATE TABLE links (
  id TEXT PRIMARY KEY,
  target TEXT NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

D1 本质是 Cloudflare 全托管的 SQLite,和 Workers 跑在同一个边缘网络上,延迟极低,通常只有几毫秒。5GB 免费额度够存几百万条短链。

项目三:API 代理网关

很多海外 API(OpenAI、Claude、Stripe)对国内 IP 直接拒绝或限速。Workers 可以做一个轻量级代理:

export default {
  async fetch(request) {
    const url = new URL(request.url);

    // 只代理 /api/ 前缀的请求
    if (!url.pathname.startsWith('/api/')) {
      return new Response('Not found', { status: 404 });
    }

    // 转发到真实 API
    const target = 'https://api.openai.com' + url.pathname;

    // 保留原始 Authorization header
    const modified = new Request(target, {
      method: request.method,
      headers: request.headers,
      body: request.body
    });

    return fetch(modified);
  }
}

绑定到 api.yourdomain.com,代码里 fetch('https://api.openai.com/...') 改成 fetch('https://api.yourdomain.com/api/...')。Cloudflare 的全球网络帮你做中转,延迟通常比直连更低。

再加一个环境变量做 API key 白名单,防止被滥用:

const allowedKeys = env.ALLOWED_KEYS.split(',');

// 检查请求的 Authorization 是否在白名单里
const authHeader = request.headers.get('Authorization') || '';
const key = authHeader.replace('Bearer ', '');
if (!allowedKeys.includes(key)) {
  return new Response('Unauthorized', { status: 401 });
}

项目四:Tunnel — 不买公网 IP 也能跑 Web 服务

家里或办公室的机器没有公网 IP?一台树莓派跑着本地服务想从外网访问?

Cloudflare Tunnel 解决的就是这个问题。

原理
本地运行 cloudflared 进程 → 和 Cloudflare 边缘建立一条持久的 QUIC 隧道 → 外部请求经过 CF 网络 → 通过隧道转发到本地服务。

全程不需要开端口、不需要公网 IP、不需要 DDNS。

安装和配置:

# 安装 cloudflared
$ curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 
  -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared

# 登录 CF
$ cloudflared tunnel login
# 浏览器弹窗授权 → 自动下载 cert.pem

# 创建隧道
$ cloudflared tunnel create my-tunnel
Created tunnel my-tunnel with id abc-def-123

# 配置 DNS — 让 tunnel.yourdomain.com 指向这条隧道
$ cloudflared tunnel route dns my-tunnel tunnel.yourdomain.com

# 跑起来 — 把本地 3000 端口暴露出去
$ cloudflared tunnel run --url http://localhost:3000 my-tunnel

推荐用 systemd service 守护进程(没错,就是上一节讲的那个):

[Unit]
Description=Cloudflare Tunnel
After=network.target

[Service]
ExecStart=/usr/local/bin/cloudflared tunnel run my-tunnel
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Tunnel 最常见的场景:

场景 之前 用 Tunnel 后
本地开发预览给客户看 部署到服务器或 ngrok cloudflared tunnel --url localhost:3000
NAS/树莓派内网穿透 DDNS + 端口转发 + 担心运营商封端口 cloudflared 常驻进程即可
不想暴露服务器真实 IP CDN 只保护 HTTP 层 Tunnel 完全不开端口,无 IP 暴露面
⚠️

注意:Tunnel 不等于 VPN。它只代理 HTTP/HTTPS 流量,不能用来访问 SSH、数据库端口。需要 TCP 层隧道的话用 Tailscale 或 WireGuard。

四个项目串联起来

最后看一下全景架构——把图床、短链、API 网关、Tunnel 串起来:

域名的子域分配

gkmix.com — 主站(CDN 加速)
img.gkmix.com — 图床(R2 公开读取)
s.gkmix.com — 短链(Workers + D1)
api.gkmix.com — API 代理(Workers)
dev.gkmix.com — 本地开发预览(Tunnel)
upload.gkmix.com — 图片上传接口(Workers)

所有这些子域都在 Cloudflare DNS 上配置,每个指向不同的产品,但都在同一个免费账户下。零成本,但架构上和一个付费的基础设施方案没有本质区别——多了一个 Workers/D1/Tunnel 的钱包而已。

什么时候该开始付费

免费套餐在以下情况下会不够用:

  • Workers 日请求超过 10 万 → Workers Paid $5/月(1000 万请求/月)
  • R2 存储超过 10 GB → $0.015/GB/月(超过部分按量计费)
  • 需要 Workers 的 CPU 密集型计算(免费版 CPU 时间限 10ms/请求)
  • 需要 20 个以上的免费 Workers 路由

但说实话——一个个人博客或小项目的图床、短链、API 代理加起来,日请求基本不超过四位数。

部署顺序建议

四个项目不用一次全搭。按优先级来:

第一天:Tunnel。如果你有本地服务想从外网访问,这是最立竿见影的——10 分钟装完 cloudflared 就能用。

第二天:R2 图床。替代 imgur 或七牛,自己有 CDN 加速的域名,图片链接永久可控。配合 macOS Shortcuts 或 Raycast 做一键上传,体验比任何第三方图床都好。

第三天:短链服务。如果你经常在社交媒体分享链接,一个自己的短链域名(比如 s.yourdomain.com/abc123)比 bit.ly 更可控。不依赖任何第三方服务,链接也不会哪天突然失效。

最后:API 代理。如果你的开发工作中需要频繁调用海外 API,Workers 代理能省掉每次配 VPN 的麻烦。

每个项目都独立——不需要先做完图床才能做短链。搭完一个就能用,想加再加。整套搭完大概三四个小时,之后基本零维护。

相关阅读:如果还没搭建 WordPress 站点,先看这篇 WordPress VPS 从零到一部署实录,裸机到 HTTPS 再到缓存,完整流程。

总结

Cloudflare 免费套餐不是”试用”——它给的量对个人开发者是真的够用的。

关键不是它给了多少,是四个产品(Tunnel + R2 + Workers + D1)的组合。单独一个 R2 只是便宜的对象存储,四个串起来才是一个完整的个人基础设施:存储、计算、数据库、网络穿透,全在边缘,全是免费额度。

大多数个人项目根本不需要 VPS。一个 Cloudflare 账号加一个域名,这套架构跑一两年都不会触发付费。

相关阅读:这套免费基建适合轻量项目;要跑 WordPress 或常驻服务,还是得看 VPS 选购指南 与 WordPress VPS 部署实录。站搭起来之后的提速,看 四层缓存配置。

© 2026 Cloudflare 免费工具箱:零成本搭建个人图床、短链与 API 网关 · 本文由 GK 原创撰写,发布于 gkmix.com。 未经授权禁止转载、洗稿、机器抓取。AI 训练数据使用需获得书面授权。
↑