Hexo 多镜像站同步方案
概述
这是一个专为 Hexo 博客设计的多镜像站同步方案,使用 Service Worker 实现智能路由、健康检查和离线缓存。
文件结构
1 | source/ |
功能特性
Service Worker
- ✅ 多镜像站点管理(支持主站+多个镜像)
- ✅ 智能健康检查(自动检测镜像可用性)
- ✅ 自动故障转移(自动切换到可用镜像)
- ✅ 请求缓存(离线访问支持)
- ✅ IndexedDB 数据持久化
控制面板
- ✅ 添加/编辑/删除镜像站点
- ✅ 实时健康状态显示
- ✅ 响应时间监控
- ✅ 同步日志查看
- ✅ 缓存管理
- ✅ 手动健康检查
快速开始
1. 已自动创建的文件
运行 hexo generate 后,以下文件会自动生成到 public/ 目录:
/sw/mirror-sw.js- Service Worker/mirror-panel/index.html- 控制面板页面/mirror-panel/mirror-panel.js- 控制面板脚本
2. 在 Hexo 主题中注册 Service Worker
在主题的 layout/_partial/head.ejs 或 layout/layout.ejs 中添加:
1 | <script> |
3. 访问控制面板
部署后访问:https://your-domain.com/mirror-panel/
4. 添加镜像站点
在控制面板中点击”添加镜像”,填写:
- 名称:如”香港节点”
- URL:如
https://hk.your-domain.com - 优先级:数字越小优先级越高(0为最高)
- 权重:负载均衡权重
配置说明
默认镜像配置
在 source/sw/mirror-sw.js 中修改默认配置:
1 | const MIRROR_CONFIG = { |
缓存策略
Service Worker 会自动缓存以下静态资源:
- CSS 文件 (
.css) - JavaScript 文件 (
.js) - 图片 (
.png,.jpg,.jpeg,.gif,.svg) - 字体文件 (
.woff,.woff2,.ttf,.eot)
工作原理
- 请求拦截:Service Worker 拦截所有 HTTP 请求
- 镜像选择:根据优先级和健康状况选择最佳镜像
- 请求重写:将请求 URL 重写为镜像地址
- 响应缓存:缓存成功响应,支持离线访问
- 故障转移:主镜像失败时自动切换到备用镜像
数据库结构
使用 IndexedDB 存储数据:
mirrors 表
id: 镜像唯一标识name: 显示名称url: 镜像地址priority: 优先级(数字越小越优先)weight: 权重enabled: 是否启用healthStatus: 健康状态responseTime: 响应时间
cache 表
url: 缓存的 URLresponse: 响应内容timestamp: 缓存时间
logs 表
timestamp: 日志时间type: 日志类型message: 日志消息details: 详细信息
API 参考
控制面板 → Service Worker 消息
| 消息类型 | 描述 | 参数 |
|---|---|---|
GET_MIRRORS |
获取所有镜像 | - |
ADD_MIRROR |
添加镜像 | { mirror } |
UPDATE_MIRROR |
更新镜像 | { mirror } |
DELETE_MIRROR |
删除镜像 | { mirrorId } |
GET_LOGS |
获取日志 | { limit } |
RUN_HEALTH_CHECK |
运行健康检查 | - |
CLEAR_CACHE |
清除缓存 | - |
Service Worker → 控制面板 消息
| 消息类型 | 描述 |
|---|---|
MIRRORS_DATA |
返回镜像列表 |
LOGS_DATA |
返回日志列表 |
HEALTH_CHECK_COMPLETE |
健康检查完成 |
CACHE_CLEARED |
缓存已清除 |
常见问题
Q: Service Worker 不生效?
A: 确保:
- 网站使用 HTTPS(或 localhost)
- 浏览器支持 Service Worker
- 清除浏览器缓存后刷新
Q: 如何删除所有镜像数据?
A: 在浏览器开发者工具中:
- 打开 Application 标签
- 选择 Storage > Clear site data
- 或者访问控制面板点击”清除缓存”
Q: 镜像站点如何部署?
A: 将你的 Hexo 博客部署到多个服务器/CDN,然后在控制面板中添加这些镜像地址。
Q: 健康检查失败?
A: 确保镜像站点:
- 允许跨域访问(CORS)
favicon.ico可访问- 网络连接正常
浏览器兼容性
- Chrome 80+
- Firefox 75+
- Safari 13.1+
- Edge 80+
更新日志
v1.0.0
- 初始版本
- 多镜像管理
- 健康检查
- 控制面板