最近存在一些文件分享需求,我希望它符合以下要求:

  1. 链接长期有效,即使文件失效再补也能保持原链接
  2. 不要出现过度限速问题
  3. 不要存在我的服务器上,我的磁盘很有限
  4. 不要暴露任何与文件本身无关的信息

一些尝试

首先我尝试把文件存在 Github 的 release 上,因为 release 不限制带宽,也是官方推荐的分发方式。不过,release 的文件链接会包括上传者和 repo 名,我不希望它出现。

Github release 的链接和 raw 不同,会 302 到 objects 子域,无法直接 rewrite。我试图用 CF workers 代理这部分流量,发现在 workers.dev 下可以工作,但绑定自定义域名后就会出现 52x 错误。后来我在 CF workers 社区中找到了相关讨论,这是个历史遗留问题,答案就是 CF 的限制(或 Bug?)
如果再试图用 worker A 通过域名访问 worker B 来绕过,会显示两者无法连通。
回头看目前基于 CF 的 Github 代理,就能发现大家都是通过加一层外部 proxy 绕过这个限制。

也就是说想要自定义域名代理 Github release 文件的话,无论如何都必须引入 CF 外的服务。

换个方案

在服务器上 fetch() 并传递给 CF 自然是可行的,不过事已至此,我决定换 AList 挂载网盘。

最终我选了 mega 网盘。挂载这个网盘只需要用户名和密码,不涉及 token、私有 API、Cookie,不需考虑过期更新的问题,也没有限速问题,非常符合开头提到的要求。

具体而言,我将 down 子域 指向我的 AList 服务器并反代,然后将直链中的 /[d|p]/files/<挂载目录> 通过 Transform Rules 去掉。

根据 CF 的文档,缓存单文件最大 100M,Page Rule 中设置最长可缓存 14 天,除了耗费一点回源流量,基本没什么消耗。

最终效果:https://down.liedown.win/Tinify-mod.zip