此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
前言
有人可能会说CloudFlare在境内各种限速丢包,用CloudFlare测速怎么可能准确,但其实这个测速网站并不是平时测速用的,而是用于优选IP上的
之前写的一个小程序FastCDN(FastCDN说明文档)或者使用CloudflareSpeedTest进行优选IP可能会遇到下载速度都是0MB/s,这是因为默认的测速https://cf.xiu2.xyz/url使用的人太多了,而这个测速地址也是搭建在CF Works上的,每天有一定的限额,用的人多了自然就用不了,所以这里推荐大家自建一个
测速网站原理
其实CloudflareSpeedTest对测速网站的要求很简单:
- 可以直接下载、文件大小超过 200MB
- 用的是 Cloudflare CDN
所以我们就先找一个源下载地址,这个源地址于CloudFlare之间最好是访问通畅的(这个一般境外的网站都可以做到),然后用CF Works反代这个下载地址就好
搭建教程
登入CloudFlare账号后,在侧边栏有一个选项是Workers和Pages,点击后我们再选择创建Works

然后随便设置一个名称,我这里就写speedtest,然后点击编辑代码,然后将我提供的代码复制上去
1 2 3 4 5 6 7 8
| addEventListener("fetch", event => { let url = new URL(event.request.url); if (url.pathname == "/" && url.search == "") { url.href="https://download.parallels.com/desktop/v17/17.1.1-51537/ParallelsDesktop-17.1.1-51537.dmg" let request = new Request(url, event.request); event.respondWith(fetch(request)); } })
|
配置好后回到speedtest中,点击触发器、添加自定义域然后添加域名就好,这里我假设添加的是st.example.com

尝试使用
可以尝试访问你的域名,如果跳出一个下载的文件就说明已经部署完成了,可以在FastCDN或者CloudflareSpeedTest中使用了
(设置FastCDN的配置文件)
1 2 3
| setting: CFST: https://st.example.com/
|
(在CloudflareSpeedTest中使用)
1
| CloudflareST -url https://st.example.com/
|
补充
后续我的使用改成了cmliu的方案:cmliu/CF-Workers-SpeedTestURL
并且我把代码中的并不那么准确的1000进位换成1024进位
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
| export default { async fetch(request) { let url = new URL(request.url); let path = url.pathname.substring(1); let isSecure = url.protocol.startsWith("https"); let bytes; if (!path) { bytes = 200000000; } else if (path === "locations") { let targetUrl = `http${isSecure ? 's' : ''}://speed.cloudflare.com/locations`; let cfRequest = new Request(targetUrl, request); let response = await fetch(cfRequest); return response; } else { const regex = /^(\d+)([a-z]?)$/i; const match = path.match(regex); if (!match) { return new Response("路径格式不正确", { status: 400, }); } const bytesStr = match[1]; const unit = match[2].toLowerCase(); bytes = parseInt(bytesStr, 10); if (unit === "k") { bytes *= 1024; } else if (unit === "m") { bytes *= 1024 ** 2; } else if (unit === "g") { bytes *= 1024 ** 3; } } let targetUrl = `http${isSecure ? 's' : ''}://speed.cloudflare.com/__down?bytes=${bytes}`; let cfRequest = new Request(targetUrl, request); let response = await fetch(cfRequest); return response; } };
|
这样就可以根据url的路径参数指定测速文件的大小,例如:
- 1024K 测试下载地址:
https://speedtest.akimio.top/1024k
- 200M 测试下载地址:
https://speedtest.akimio.top/200m
- 1G 测试下载地址:
https://speedtest.akimio.top/1g
如果不指定则默认下载200M的文件进行测速