#260315 Cloudflare Workers: 健康检查、自动转移的实现
背景
我的rpi部署cloudreve后,我目前有两个供应下载站的存储桶。
一个是第三方的cloudreve,一个是我自己的cloudreve。
我就想要做一个健康检查、自动转移的一个“负载均衡”系统,于是用vibe coding技术搓了一个。
正文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| export default { async fetch(request, env, ctx) { const url = new URL(request.url); const targetHost = 'dl-p.imjcj.eu.org'; const targetUrl = `https://${targetHost}${url.pathname}${url.search}`; const cache = caches.default; if (request.method === "GET" || request.method === "HEAD") { let response = await cache.match(request); if (response) { const newHeaders = new Headers(response.headers); newHeaders.append("CFW-Cache-Status", "HIT"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHeaders }); } } const response = await fetch(targetUrl, { method: request.method, headers: request.headers, body: request.body }); if (response.status >= 500) { const backTargetHost = 'dl-b.imjcj.eu.org'; const backTargetUrl = `https://${backTargetHost}${url.pathname}${url.search}`; const backResponse = await fetch(backTargetUrl, { method: request.method, headers: request.headers, body: request.body }); return backResponse; } if ((request.method === "GET" || request.method === "HEAD") && response.status === 200) { const responseToCache = response.clone(); ctx.waitUntil(cache.put(request, responseToCache)); const newHeaders = new Headers(response.headers); newHeaders.append("CFW-Cache-Status", "MISS"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHeaders }); } return response; } };
|
全程部署教程:
- 将备用站部署到
dl-b.imjcj.eu.org(开橙云、缓存1d),主用站部署到dl-p.imjcj.eu.org(开橙云,缓存1d)
- Cloudflare Worker部署以上代码
- 配置路由
dl.imjcj.eu.org/*到worker
提速教程:
- 两个cloudreve都在中国,避免数据走
Cloudreve→(亚太→北美)→下载站→(北美→亚太)→用户,直接走Cloudreve→(亚太)→下载站→(亚太)→用户
- 我的备用站和主用站都部署在vercel,vercel项目仪表盘→
Settings→Functions,将functions的执行数据中心定在ap-east-1(即中国香港地区)
- cloudflare worker项目仪表盘→设置→运行时→放置,选择区域→AWS→
ap-east-1(中国香港地区)
- 提速完成,健康检查及自动转移配置完成