前言
本博客目前是托管在 Github Pages 上,突发奇想部署一份在私人服务器上,并且两边资源都能够动态访问到。于是了解到几种来分流资源的策略:
- DNS 轮询
- 开源平台 Nginx、Apache 等
- 各大云商提供的负载器服务等
- CND
起初想尝试 Cloudflare 平台的智能 DNS 服务,但是需要付费($5/mo)。于是就想通过 Cloudflare Workers 来尝试一下。
注册 Cloudflare 账户
- 前往 Cloudflare 注册开通账户,并将域名托管至 CF
- 添加 CNAME 记录将
aaa.com
解析至 YourGithubRepoName.github.io。这里需要在 Github Pages 仓库中设置自定义域名。具体见 - 添加 A 记录将
blog.aaa.com
解析至你的服务器真实 IP - SSL/TLS 开启完全严格模式
- (必须) 开启 DNS 记录中的 Proxy (小橘云)
创建 Workers
- 转到 Workers 和 Pages
- 选择
创建应用程序
- 贴上以下代码
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
27addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
// 轮询的目标服务
const TARGETS = [
'aaa.com',
'blog.aaa.com'
]
async function handleRequest(request) {
const url = new URL(request.url)
url.hostname = getRandomServer()
return await fetch(url, request)
}
// 每小时切换不同的目标
function getServerEveryHour() {
const d = new Date()
const h = d.getHours()
return TARGETS[h%TARGETS.length]
}
// 每次都随机目标(要注意目标之间是否有跨域)
function getRandomServer() {
return TARGETS[Math.floor(Math.random() * TARGETS.length)]
} - 保存并部署
使用 Worker
- 查看刚刚创建的 Worker,详情页选择触发器
- 在
路由
界面点击添加路由
- 路由:可以填
aaa.com
,可以使用通配符。具体可见 - 选择区域:刚才创建的
aaa.com
- 路由:可以填
验证
在刚刚创建的 Workers 配置页面顶部右上角点可以编辑并调试、实施预览 JavaScript 代码
修改这一段代码来验证分流是否生效:
1 | // 轮询的目标服务 |
刷新页面有时你会发现加载到 Bing.com 就说明配置生效了
最后验证完记得把地址改回去~
总结
想尝试 Cloudflare 平台的 Workers 功能可以试试,以上方式仅图一乐,真正的负载均衡需要考虑更多方方面面的因素:负载均衡策略、扩展性、故障容灾等等等等(我也不会