摘要:本文介绍如何利用 Cloudflare Workers 构建一个高性能、高可用的维基百科镜像服务。通过边缘计算能力,实现请求代理、HTML 动态重写、智能缓存与容错回退,显著提升用户访问体验。方案适用于各类开源知识库、静态资源聚合等场景,具备良好的扩展性与工程实践价值。
维基百科作为全球最大的开放知识库,其内容对教育、科研和公众信息获取具有重要价值。然而,由于网络环境复杂性,部分用户在访问过程中可能面临加载缓慢、资源阻断等问题。
为提升访问体验,我们基于 Cloudflare Workers 构建了一个轻量级镜像服务,核心目标包括:
⚠️ 说明:本项目仅用于技术研究与教育目的,所有内容均来自维基媒体基金会公开授权的开放知识,严格遵守其使用条款。
整体架构基于 Cloudflare Workers 的无服务器能力,无需后端服务器,全部逻辑在边缘节点执行:
用户请求
↓
自定义域名 (如 wikipedia.zyhorg.ac.cn)
↓
Cloudflare Worker(边缘执行)
├── HTML 请求 → 重写链接 + 短期缓存
├── 静态资源 → 直接代理 + 长期缓存
└── 代理失败 → 自动回退 + 错误页
我们约定代理路径格式为:
https://wikipedia.zyhorg.ac.cn/__proxy__/原始主机名/原始路径
例如:
/upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg
→
https://wikipedia.zyhorg.ac.cn/__proxy__/upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg
Worker 通过判断 URL 是否以 /__proxy__/
开头,决定进入代理转发逻辑或站点主逻辑。
对于 HTML 页面,使用 Cloudflare 提供的 HTMLRewriter
API,在流式响应过程中实时修改 DOM 属性:
<a href>
、<img src>
、<script src>
等常见资源链接;srcset
、data-srcset
等响应式图片属性;style="background: url(...)"
中的 URL;/
到维基百科首页(如 /wiki/Wikipedia:首页
)。new HTMLRewriter()
.on('a', new AttrRewriter('href'))
.on('img', new AttrRewriter('src'))
.on('img', new AttrRewriter('srcset'))
.on('*', new StyleAttrRewriter())
.transform(response);
max-age=900
),平衡实时性与性能;max-age=2592000
);caches.default
+ Cloudflare cacheEverything
指令,确保资源持久驻留边缘节点。upload.wikimedia.org
)连续返回 5xx 错误,则在 1 小时内快速失败,避免无效请求;Content-Security-Policy
、X-Frame-Options
等限制性响应头,避免嵌入或渲染问题。User-Agent
、Referer
等关键头,模拟正常浏览器行为;Host
、X-Forwarded-For
等 hop-by-hop 头,防止上游识别异常;wikipedia.zyhorg.ac.cn
)CNAME 到 *.workers.dev
,并开启 Cloudflare 代理(橙色云);wikipedia.zyhorg.ac.cn/*
;本方案不仅适用于维基百科,还可推广至:
通过 Cloudflare Workers,我们以极低的成本实现了一个高性能、高可用的镜像代理服务。其核心价值在于:
开源声明:本文所涉代码逻辑已做通用化处理,完整实现可参考公开技术示例(非生产环境直接使用)。开发者应根据实际需求调整缓存策略、安全规则与错误处理逻辑。
作者:杖雍皓
标签:#Cloudflare #边缘计算 #反向代理 #HTML重写 #Web性能优化 #无服务器架构
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。