作者:杖雍皓
标签:#边缘计算 #Serverless #反向代理 #HTML重写 #Web性能优化 #CloudflareWorkers
背景
维基百科作为全球知名的开放知识平台,其内容在教育、科研和公众信息获取中具有重要价值。然而,在实际访问过程中,用户可能因网络延迟、资源加载失败或跨域策略限制,导致页面渲染不完整或加载缓慢。
为提升访问体验,我们基于 Cloudflare Workers 构建了一套轻量级、高可用的知识库镜像服务。该服务通过边缘计算能力,实现请求代理、HTML 动态重写、智能缓存与容错回退,显著优化终端用户的访问性能。
📌 说明:本项目仅用于技术研究与教育目的,所有内容均来自维基媒体基金会(Wikimedia Foundation)公开授权的开放知识,严格遵守其使用条款及开源协议。
技术目标
本方案旨在实现以下核心能力:
- 透明路径映射:将原始资源请求无缝映射至自定义域名下的代理路径;
- HTML 动态重写:在边缘节点实时改写页面中的链接、图片、脚本等资源地址;
- 分级缓存策略:对 HTML 页面与静态资源采用差异化缓存策略,兼顾实时性与性能;
- 高可用保障:支持请求失败自动回退、主机健康检测与友好错误提示;
- 安全头清理:移除限制性响应头(如 CSP、X-Frame-Options),提升页面兼容性。
架构设计
系统基于 Cloudflare Workers 的无服务器架构,无需维护后端服务器,全部逻辑在 Cloudflare 全球边缘节点执行:
用户请求
↓
自定义域名(如 wikipedia.zyhorg.cn)
↓
Cloudflare Worker(边缘执行)
├── HTML 请求 → 动态重写 + 短期缓存(15分钟)
├── 静态资源 → 代理转发 + 长期缓存(30天)
└── 请求失败 → 自动回退 + 友好错误页
核心实现解析
1. 路径路由与代理机制
我们定义统一的代理前缀路径:https://wikipedia.zyhorg.cn/__proxy__/{host}{path}
例如:https://upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg
→https://wikipedia.zyhorg.cn/__proxy__/upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg
Worker 通过判断 URL 是否以 /__proxy__/
开头,决定进入代理转发逻辑或主站逻辑。
2. HTML 动态重写(HTMLRewriter)
利用 Cloudflare 提供的 HTMLRewriter
API,在流式响应过程中实时修改 DOM:
- 支持
href
、src
、srcset
、data-src
等常见属性; - 处理
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);
3. 智能缓存策略
- HTML 页面:缓存 15 分钟(
max-age=900
),适用于内容更新较频繁的场景; - 静态资源(图片/CSS/JS/字体等):缓存 30 天(
max-age=2592000
); - 利用
caches.default
+ CloudflarecacheEverything
指令,确保资源高效驻留边缘节点; - 缓存写入采用异步方式,避免阻塞主请求流程。
4. 容错与高可用设计
- 主机失败缓存:若某上游主机连续返回 5xx 错误,则在 1 小时内快速失败,避免无效请求;
- 双重回退机制:
- 首次失败后,尝试移除自定义请求头直接请求原始 URL;
- 若仍失败,返回结构化错误页,引导用户访问源站;
- 安全头清理:自动移除
Content-Security-Policy
、X-Frame-Options
等限制性响应头,确保页面可嵌入、可渲染。
5. 请求头与安全处理
- 转发
User-Agent
、Referer
等关键头,模拟正常浏览器行为; - 移除
Host
、X-Forwarded-For
、CF-RAY
等 hop-by-hop 头,防止上游识别异常; - 对主机名校验(仅允许字母、数字、点、连字符),防范 SSRF 风险。
部署建议
- DNS 配置:将自定义域名 CNAME 到
*.workers.dev
,并开启 Cloudflare 代理(橙色云); - Worker 路由:在 Cloudflare 控制台配置路由规则,如
wikipedia.zyhorg.cn/*
; - HTTPS 证书:启用“边缘证书”自动签发,确保全站 HTTPS;
- 监控告警:通过 Cloudflare Dashboard 监控请求量、缓存命中率、错误率等关键指标。
应用扩展场景
本方案具有良好的通用性,可推广至以下场景:
- 开源技术文档站镜像(如 MDN Web Docs、Kubernetes 官方文档);
- 高校或科研机构内部知识库的外部访问加速;
- 多源静态资源统一代理与缓存;
- 教育类网站的性能优化与容灾备份。
总结
通过 Cloudflare Workers,我们以极低的运维成本构建了一个高性能、高可用的知识库镜像服务。其核心优势在于:
- 边缘计算:逻辑靠近用户,延迟更低;
- 无服务器架构:免运维、自动扩缩容;
- 流式处理:HTMLRewriter 实现零内存占用的实时重写;
- 工程健壮性:缓存、回退、错误处理机制完善。
🔒 合规声明:本文所述技术方案仅用于提升开放知识平台的访问体验,所有内容均来自合法公开渠道,不涉及任何违规行为。开发者在实际应用中应确保内容来源合法、用途合规。