对于没有后缀名的 Url 支持?
luckykeeper opened this issue · 6 comments
需求:使用 freecdn 加速自建图床的图片
当前遇到的问题:freecdn 无法生成指定 url 的 manifest 文件
使用环境:Fedora35 x64 npm 8.3.1 node v16.14.0
期望的结果:生成如下形式的 manifest 文件
https://wdv2.luckykeeper.site:44443/api/v3/file/get/15210/Grafana01.3xocpg8qrvg0.png?sign=AAGdAq59LROvoKi0nO6SEvHFnkLvVWfx8DSm5QlEGVI%3D%3A0
https://raw.github……
https://jsdevlir……
hash=……
实际的结果:没有生成 https://wdv2.luckykeeper.site:44443 对应的结果
生成使用的脚本如下:
# 自动生成 Freecdn By Luckykeeper For LuckyBlogV2
# Last Update 2022-03-03
# 删除以前数据
freecdn db --del-all
# 导入比对 Urls
files=$(find * -type f ! -path "freecdn-*" ! -name ".*")
list=""
for file in $files; do
hash=$(openssl dgst -sha256 -binary $file | openssl base64 -A)
list="$list
$hash https://cdn.jsdelivr.net/gh/luckykeeper/LuckyBlog_RS@1.028/$file
$hash https://raw.githubusercontent.com/luckykeeper/LuckyBlog_RS/1.028/$file"
done
# 输出比对列表
echo "$list"
# 导入比对列表到数据库
freecdn db --import <<< "$list"
# 输出当前数据库内容
freecdn db --list
# 把 wdv2 的列表和上面的列表比对,生成加速清单
freecdn find --save --with-urls urls.txt
# 生成加速 js
freecdn js --make
echo "生成成功!"
进行的其他尝试:已经按照 https://github.com/EtherDream/freecdn/tree/master/examples/cdn-fallback#搜索资源 提供的方法进行尝试,将 freecdn 此示例提供示例 js 文件 url 放到 urls.txt 最前面,发现能够正常生成 https://ajax.cdnjs.com/ajax/libs/jquery/3.2.1/jquery.js 的加速清单文件,但是不能正常生成自建图床 https://wdv2.luckykeeper.site:44443 的图片加速文件
合理怀疑:由于生成清单脚本运行速度过快,猜测对于这个没有后缀名的链接,形如 https://wdv2.luckykeeper.site:44443/api/v3/file/get/15210/Grafana01.3xocpg8qrvg0.png?sign=AAGdAq59LROvoKi0nO6SEvHFnkLvVWfx8DSm5QlEGVI%3D%3A0 ,freecdn 直接进行了跳过处理,没有访问计算哈希
附:生成用的 urls.txt 文件
urls.txt
没有生成 https://wdv2.luckykeeper.site:44443/ 对应的结果
是不是在生成 Hash URL 列表时,没有添加这个站点?
for file in $files; do
hash=$(openssl dgst -sha256 -binary $file | openssl base64 -A)
list="$list
$hash https://cdn.jsdelivr.net/gh/luckykeeper/LuckyBlog_RS@1.028/$file
$hash https://raw.githubusercontent.com/luckykeeper/LuckyBlog_RS/1.028/$file"
done
这里只生成了 cdn.jsdelivr.net 和 raw.githubusercontent.com 的 URL,没有自己的站点?
@EtherDream
这里应该不需要把自己的站点加上去吧,我这里的用法类似 #3 ,不过 #3 中是先上传到了 jsdelivr ,我是先上传到了自建图床,具体来说:
这里 $hash
不是放在 CDN 的仓库链接嘛,我没有采用本地图床,也就是说,要加速的文件
全部都是像下面这样的(没有本地文件)
https://wdv2.luckykeeper.site:44443/api/v3/file/get/15210/Grafana01.3xocpg8qrvg0.png?sign=AAGdAq59LROvoKi0nO6SEvHFnkLvVWfx8DSm5QlEGVI%3D%3A0
而不是 站点目录/images/xxx.png
,这里 https://wdv2.luckykeeper.site:44443/xxxx 就相当于本地文件
那么我应该生成 jsdelivr 的 Hash URL ,来和我 要加速的文件
进行对比,要加速的文件
放在 urls.txt 里面
所以在 db 里面应该不放自己站点图床的 url ,而是放 CDN 的 url ,提供 urls.txt 给 freecdn 进行比对,freecdn 先下载 urls.txt 即 https://wdv2.luckykeeper.site:44443/xxxx 的文件,计算其 hash 值,再和前面导入 db 的 jsdelivr 等 CDN 仓库的文件进行比对,hash 值一致,生成像下面的文件
(emmmm,看来之前可能是 GitHub 渲染的引用缩进没有渲染出来,容易导致误解)
(修改一下)
https://wdv2.luckykeeper.site:44443/xxxx
https://cdn.jsdelivr.net/gh/luckykeeper/LuckyBlog_RS@1.028/1.png
……
hash=123456
然后基于上面的 manifest 文件,当我无法访问站点原文件 https://wdv2.luckykeeper.site:44443/xxxx 的时候,freecdn 会自动切换到 https://cdn.jsdelivr.net/gh/luckykeeper/LuckyBlog_RS@1.028/1.png
(注:生成中脚本是在图床的 GitHub 仓库目录下运行的,根据脚本输出能够确认 urls.txt 对应的 CDN 图床文件的 hash 已经加入 db )
我觉得我理解的应该没有问题,还请您不吝赐教
找到原因了,程序默认是忽略 URL 参数部分的,所以那些 URL 都是同个 Hash 了(错误信息的 hash)。
我准备更新下程序,可以加个参数不忽略 URL 参数。
找到原因了,程序默认是忽略 URL 参数部分的,所以那些 URL 都是同个 Hash 了(错误信息的 hash)。
我准备更新下程序,可以加个参数不忽略 URL 参数。
好的,辛苦大佬啦,等更新了我再试试
谢谢大佬的解答,那我先 close 这个 issue 了
最近更新了一个新版本,现在带 query 的 URL 可以命中了。
另外加了新增 站点权重 功能,这样可以选择优先使用原 URL 还是备用 URL。
好耶~感谢大佬!