关于下载测速不可用/不稳定 (`0.00 MB/s`) 的 情况说明 及 解决方法... · XIU2/CloudflareSpeedTest · Discussion #490
# 自建下载测速地址(三选一):
1. Cloudflare Workers 自生成指定大小文件(无需反代其他文件,无需服务器,需要域名)
通过 Cloudflare 官方测速接口,自动生成指定大小的空文件供 CloudflareST 下载测速使用,无需寻找并反代其他外部文件地址。
- 更灵活(文件大小随便自定义)
- 更准确(因为是官方接口内部临时生成空文件,而非去反代其他外部文件地址,最大程度减少了回源环节对下载测速的影响)
- 更稳定(毕竟如果反代的其他文件地址挂了就还要手动更换什么的)。
具体见项目:https://github.com/cmliu/CF-Workers-SpeedTestURL
2. Cloudflare Workers 文件反代(需要反代其他文件,无需服务器,需要域名)
注意:因为
*.workers.dev域名被 DNS 污染,所以默认分配的子域名将无法使用,有域名的可以将 Workers 服务路由绑定至自己的域名就能访问了。
可以利用 Cloudflare Workers 服务,这个只限制访问次数不限制流量,免费版每日 10 万次数限制(每天 8 点重置)。
搭建 Workers 文件反代很简单,也就在 Cloudflare 后台点几下就完事了,连服务器都省了。
「 点击展开 查看快速搭建步骤 」
简单来说就是:创建服务、粘贴代码、保存部署,完事~
- 打开 Cloudflare Workers,点击中间橙色的 Start building 按钮。
如果是第一次用,则会让你取个 "专属于你" 的二级子域名,即 YYY.workers.dev,以后可以改...
- 点击 创建服务 按钮(如下图所示)
- 输入服务名称(三级子域名),选择第二个 HTTP 处理程序,点击 创建服务 按钮(如下图所示)
- 点击右下角的 快速编辑 按钮
- 清空原内容并粘贴以下代码,点击 保存并部署(通常 10 秒内就完成了,如下图所示)
addEventListener("fetch", event => { let url = new URL(event.request.url); url.protocol = 'https:' url.hostname = "cachefly.cachefly.net"; let request = new Request(url, event.request); event.respondWith(fetch(request)); })
这里是以
https://cachefly.cachefly.net/200mb.test为反代目标(不建议只照着这一个薅),不过最大只有 200MB,想要更大的请修改反代目标(下面有可用的大文件 URL),另外如果目标是 http 地址则记得将上面代码中的https:改为http:
为了减少回源,提高下载测速准确度。建议反代目标选择文件小于 512MB 且 支持 CDN 缓存的文件后缀。
最后尝试浏览器访问https://XXX.YYY.workers.dev/200mb.test如果可以正常下载则代表部署成功
注意:因为
*.workers.dev域名被 DNS 污染,所以默认分配的子域名将无法使用,有域名的可以将 Workers 服务路由绑定至自己的域名就能访问了。
具体可以看看 #189 这里提到了 Workers 自定义域名。
后续使用 CloudflareST 时,记得加上 -url 参数,例如:
# Windows CloudflareST.exe -url https://XXX.YYY.workers.dev/200mb.test # Linux/Mac ./CloudflareST -url https://XXX.YYY.workers.dev/200mb.test
访问这个 URL 其实就是在反代 https://cachefly.cachefly.net/200mb.test
如果想要改成其他大文件 URL(下面写的有),只需要修改 Workers 代码中的cachefly.cachefly.net域名和协议即可
2.1【可选】自定义 Workers 地址的 URL 路径(简短好记)
「 点击展开 查看简单说明 」
把上面原先的 Workers 代码改成下面这样,即可把原先很长/不好记的 URL 路径改为简短好记:
addEventListener("fetch", event => { let url = new URL(event.request.url); if (url.pathname == "/test" && url.search == "") { url.href="https://cachefly.cachefly.net/200mb.test" let request = new Request(url, event.request); event.respondWith(fetch(request)); } })
其中第 3 行的 /test 就是你可以自定义的 URL 路径,最终下载测速地址为:https://xxx.yyy/test
你可以将其改为
/,这样的话最终下载测速地址为:https://xxx.yyy(/可省略不写
3. 服务器套 Cloudflare CDN(需要服务器+域名)
「 点击展开 查看简单说明 」
首先你需要有个域名,然后在你的服务器上建立一个简单的虚拟主机(也就是 HTTP 服务/网站,如 Nginx / Apache / Caddy 等,也不需要去申请 SSL 证书,毕竟这玩意用不上回源加密),虚拟主机绑定你的域名,并在虚拟主机目录下生成一个空文件即可:
# 以下命令会在 /XXX 目录下,生成一个文件名为 cfst.bin 大小为 300MB 的文件 # 记得修改命令中的 /XXX/ 示例路径,否则直接运行会提示找不到文件夹! dd if=/dev/zero of=/XXX/cfst.bin bs=1M count=0 seek=300 # 因为是空文件(稀疏文件),所以并不会实际占用服务器的 300 MB 硬盘空间(只会占用一些元数据和少量实际分配的存储空间),可以使用 ls -lh cfst.bin 和 du -h cfst.bin 来对比一下文件大小 # 另外,也因为是稀疏文件的缘故,Cloudflare 在缓存压缩时,这种空稀疏文件 300MB 也会被压缩到极小(几 KB?和你用任何压缩协议压缩后的大小差不多,反正只要随意压缩了就会变得极小),不占用 Cloudflare 的节点缓存空间,因此 Cloudflare 并没有追究文件正不正常的问题,顶多像我这样因流量太大(每天 10TB)而被域名限速了。。。 # 另外,不建议搞太多不同大小的文件,这样不利于缓存,因此 Cloudflare 的缓存机制还会看文件热度,如果流量分散到几个文件上,可能会导致文件热度不足早早就被清理,从而增加回源次数,消耗服务器流量。
也可以使用其他 Cloudflare CDN 支持缓存的文件后缀,具体见:#default-cached-file-extensions
最后在 Cloudflare 上给你的域名添加 A 解析记录指向你的服务器 IP,并点击切换为橙色云朵(即走 Cloudflare CDN)即可。
使用初期的时候,会因为回源而消耗部分服务器流量并缓存到 CDN 节点,后续访问 URL 就直接从 CDN 缓存中读取了。
另外,建议去缓存 - Tiered Cache 中开启 Tiered Cache Topology 功能,这样可以进一步降低回源次数,节省服务器流量。
# 一些可用于 Cloudflare Workers 文件反代 的大文件 URL:
文件反代不知道在哪里找大文件的话,可以去看看各 IDC 的官方测速文件(可以谷歌搜索 VPS looking glass 或 testfile MB 就能找到很多,建议优先选择美西),建议选择 512MB 以下且 支持 CDN 缓存的文件后缀,我举几个例子:
# 这几个小于 512 MB,且都是会被 CDN 缓存的 .zip 文件后缀(常见的 文档、图片、音视频、压缩包、安装包、静态文件 后缀) http://ipv4.download.thinkbroadband.com/200MB.zip http://ipv4.download.thinkbroadband.com/512MB.zip https://testfileorg.netwet.net/500MB-CZIPtestfile.org.zip # 这几个 .test 的后缀是不支持缓存的,可以用但会影响下载测速准确度 https://cachefly.cachefly.net/200mb.test https://lg-seattle.cloudzy.com/500MB.test https://lg-miami.cloudzy.com/500MB.test https://lg-chicago.cloudzy.com/500MB.test https://lg.my.controlvm.com/500MB.test http://23.145.48.48/500MB.test http://speedtest-sfo3.digitalocean.com/1gb.test
注意:这些文件地址是让你 Workers 反代用的,不能直接用于
-url参数!