前言
我手头的服务(如服务器探针)大多支持自定义背景,但往往仅限填入单一的图片直链。久而久之,这种静态的视觉呈现难免令人产生审美疲劳。虽然市面上不乏现成的随机图 API,但它们很难满足我“自定义图库”的个性化需求。
为了解决通过一个链接实现背景轮播的问题,在权衡了自建服务器的高维护成本后,我将目光投向了 Serverless 方案。既然手握 Cloudflare Workers 订阅,何不利用它搭建一个轻量、零成本且完全可控的随机图床?本篇教程将记录这一实现过程。
准备
在开始之前,请确保你已经准备好以下两样东西:
- Cloudflare 账户 通常情况下,Free 免费版已完全足够个人使用(每日 10 万次请求)。
- 注:如果你像我一样订阅了每月 $5 的 Workers Paid 高级版,将获得更宽松的 CPU 时间限制和更高的并发处理能力。
- 图片直链列表 (URL List) 你需要准备一批可直接访问的图片链接。
- 图源可以是公共图床(如微博、Imgur),也可以是其他对象存储。
- 预告:当然,你也可以用 Workers 自建一个图床来确保存储可控,这部分内容我们留到以后的文章再细聊。
部署
创建 Worker 服务
登录 Cloudflare 控制台主页,按照以下路径操作:
- 展开左侧侧边栏,进入 Workers & Pages。
- 点击 Create Application (创建应用程序)。
- 点击 Create Worker (创建 Worker)。
- 为你的服务命名(例如
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 虽然简单,但它是我优化个人服务体验的一块重要拼图。现在,轮到你动手了。如果你在部署过程中遇到了任何问题,或者有更优雅的代码实现方案,欢迎在评论区留言交流。
既然刷新了页面,不如期待一下下一张出现的,会是怎样的风景?







https://random-img.wangver.com 我目前的api