Serverless 极简主义:用 Cloudflare Workers 重构随机图 API

前言

我手头的服务(如服务器探针)大多支持自定义背景,但往往仅限填入单一的图片直链。久而久之,这种静态的视觉呈现难免令人产生审美疲劳。虽然市面上不乏现成的随机图 API,但它们很难满足我“自定义图库”的个性化需求。

为了解决通过一个链接实现背景轮播的问题,在权衡了自建服务器的高维护成本后,我将目光投向了 Serverless 方案。既然手握 Cloudflare Workers 订阅,何不利用它搭建一个轻量、零成本且完全可控的随机图床?本篇教程将记录这一实现过程。

准备

在开始之前,请确保你已经准备好以下两样东西:

  1. Cloudflare 账户 通常情况下,Free 免费版已完全足够个人使用(每日 10 万次请求)。
    • 注:如果你像我一样订阅了每月 $5 的 Workers Paid 高级版,将获得更宽松的 CPU 时间限制和更高的并发处理能力。
  2. 图片直链列表 (URL List) 你需要准备一批可直接访问的图片链接。
    • 图源可以是公共图床(如微博、Imgur),也可以是其他对象存储。
    • 预告:当然,你也可以用 Workers 自建一个图床来确保存储可控,这部分内容我们留到以后的文章再细聊。

部署

创建 Worker 服务

登录 Cloudflare 控制台主页,按照以下路径操作:

  1. 展开左侧侧边栏,进入 Workers & Pages
  2. 点击 Create Application (创建应用程序)
  3. 点击 Create Worker (创建 Worker)
  4. 为你的服务命名(例如 random-img),点击 Deploy (部署)

写入核心代码

创建完成后进入项目概览页,点击右上角的 Edit code (编辑代码)。 请根据你的实际需求,从以下两种方案中二选一,覆盖编辑器内的原有代码:

方案 A:302 重定向模式 (推荐)

特点: 极速、节省 Worker 资源。浏览器地址栏会变成最终图片的真实链接。

export default {
 async fetch(request, env, ctx) {
  *// 1. 定义图片列表 (这里可以放成百上千个)*
  const images = [
   "https://example.com/image1.png",
   "https://example.com/image2.png",
   "https://example.com/image3.png",
   *// 复制粘贴更多链接,用逗号隔开...*
  ];
  *// 2. 随机选取一张*
  const randomImage = images[Math.floor(Math.random() * images.length)];
  *// 3. 返回 302 重定向*
  return Response.redirect(randomImage, 302);
 },
};

方案 B:隐形代理模式 (进阶)

特点: 隐蔽性强。浏览器地址栏始终保持不变,图片由 Worker 抓取后转发,支持强制防缓存

export default {
  async fetch(request, env, ctx) {
    const images = [
      "https://example.com/image1.png",
      "https://example.com/image2.png",
      // 你的更多图片...
    ];

    const randomImage = images[Math.floor(Math.random() * images.length)];

    // Fetch 请求原始图片
    const response = await fetch(randomImage);

    // 创建新响应,目的是为了修改 Header 骗过浏览器不缓存
    const newResponse = new Response(response.body, response);

    // 设置强力不缓存 Header (关键!否则刷新不会变)
    newResponse.headers.set("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate");
    newResponse.headers.set("Pragma", "no-cache");
    newResponse.headers.set("Expires", "0");

    return newResponse;
  },
};

方案对比与保存

在点击右上角 Save and deploy 之前,请确认哪种模式适合你:

  • 资源消耗: 方案 A 几乎不消耗 Worker 额度;方案 B 会消耗 CPU 时间和传输流量(虽然免费版 10w 次/日 通常够用)。
  • 隐私性: 方案 A 会暴露图片原始地址;方案 B 则完全隐藏图源。

验证结果

部署完成后,回到项目概览,你会获得一个类似 https://random-img.你的用户名.workers.dev 的默认域名。

直接访问该链接,如果配置无误,每次刷新页面(或按F5),你都将看到一张新的图片。

结语

折腾的乐趣,往往不在于结果,而在于从“想”到“做”的过程。

这个随机图 API 虽然简单,但它是我优化个人服务体验的一块重要拼图。现在,轮到你动手了。如果你在部署过程中遇到了任何问题,或者有更优雅的代码实现方案,欢迎在评论区留言交流。

既然刷新了页面,不如期待一下下一张出现的,会是怎样的风景?

评论

  1. Avatar photo
    博主
    Windows Chrome
    2 周前
    2025-12-20 18:52:26

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇