是否存在一个自建文件缓存服务器软件

2023-06-06 12:27:45 +08:00
 mgrddsj

起因

家里有一台 NAS ,存储了不少文件,但家宽的低上传带宽、非标端口、家宽 Web 服务敏感等问题使我一直没有用它直接分享文件给别人。

我现在分享文件基本都是通过搭建在一台云服务器上的 File Browser 进行的,上传文件→分享→发送链接给朋友,使用体验还是相当满意的。不像国内网盘要登录+下载客户端才能下载 /在线播放视频,还“不限速”。但是云服务器的空间有限,一般系统盘就只有几十 GB ,付费扩容又感觉没什么必要(毕竟家里已经有 NAS 了)。

我当然可以定期清理很久之前共享的文件,毕竟很多录屏等内容是有时效性的,聊天话题过去了就基本不会点开第二次了。但我个人并不喜欢“链接会过期”这个概念,大概是数据仓鼠的一个体现吧,但数据就这样“丢失”了会让我感到难受。况且这些文件我大概率会在 NAS 上有备份。

需求

所以我就想找这么个文件缓存服务器,能够打通我的云服务器和 NAS 。新的文件缓存在云服务器上供快速访问,达到某个阈值(存储空间限制 /访问频率)后删除云服务器上的缓存。缓存被删除的文件再次被访问到时就“回源”,从 NAS 上拉取,并缓存一段时间。

某种意义上,这有点像品牌 NAS 自带的 SSD 缓存功能,把一些最近常用的文件存到 SSD 里,HDD 当仓库盘。但我想要的是远程的、可自建的。

文件共享这块的网页前端操作起来最好要简单,因为如果搭好了,我是打算让家里人用的,让他们基本完全摆脱国内网盘(除了下载别人共享的文件,这个没太大办法)。

目前找到的产品

Nginx 配置 cache

配置 Nginx 当反代和当网页服务器我还算熟悉,但反代+缓存的配置我是还没有接触过的。

稍微看了一下 Nginx Content Caching 的文档,似乎是我要找的东西。但是我有几个疑问:

如果有朋友用过这种方案,可以分享下心得吗?感谢!

Rclone Mount

Rclone 在 mount 一个 remote 的时候,是可以设置 cache 的,感觉像是挺适合我的使用场景的。

不过我之前在 Windows 上用 Rclone + WinFsp 的体验并不是特别好,有时连接不是很稳定会导致挂载的盘卡死。不知道在它的主要平台 Linux 上表现会不会好一点。

如果 OK 的话,感觉 Rclone mount + File Browser 是个可行的选择。不知道是否有人有相关经验?或许过几天我有空可以试一下。

但我也有一个担心:因为对于 File Browser 来说,mount 出来的是本地存储,在回源的时候延迟高一点的话不知道会不会直接请求失败。

Alist

看文档有提到缓存配置,就在之前搭好的 Alist 上用 WebDav 挂载了 NAS 试了一下,它似乎没法满足我的要求:


如果实在不行,我或许可以自己写一个这样的项目来练练手,不过如果现有方案能工作就最好了。

1399 次点击
所在节点    问与答
8 条回复
hymzhek
2023-06-06 13:14:40 +08:00
squid ?
sofukwird
2023-06-06 13:31:55 +08:00
自己写一个,第一次访问的时候检查文件是否存在于 OSS 存储,有的话 302 返回 OSS 链接,没有的话访问 Nas 检查文件是否存在,存在则将文件上传至 OSS 后 302 返回 OSS 链接,不存在则返回 404
OSS 文件可以设置在多少天后自动删除

web ui 界面创建分享链接的时候就可以后台访问一次分享链接触发首次缓存
Kinnice
2023-06-06 14:56:45 +08:00
群辉:
CloudSync:自动同步 Nas 的 CloudShare 文件夹,想要分享的时候,就把 nas 的相关文件拷贝到 CloudShare 文件夹,自动同步到 某个存储(可以是你的云服务器或者[阿里云盘+alist]),配合群辉的定时任务 /自己写个 crontab ,自动清空过老的文件,CloudSync 也会删掉对面的(如果是阿里云盘,感觉都不用删
mgrddsj
2023-06-06 22:06:28 +08:00
@hymzhek #1 噢我没想到这个方案,之前折腾 HTTP 代理的时候有试着部署过,但是部署到一半嫌配置麻烦就放弃了。刚刚查了一下,第一次知道它还有 FTP 代理的功能。这个用起来应该比 Nginx 专业?(毕竟本身就是为了内容缓存而生的软件)我考虑下应该部署 File Browser + HTTP 代理还是 FTP 代理 + 支持 FTP 的文件管理前端。感谢提议!
mgrddsj
2023-06-06 22:08:41 +08:00
@sofukwird #2 是个办法,如果没有现成的方案我就试着写一下了。感谢提供思路。
mgrddsj
2023-06-06 22:10:45 +08:00
@Kinnice #3 嗯,这种就很多软件都能实现了,我也有用 Syncthing 来多端同步某个文件夹,但这并不是我想实现的效果,我就是不想自动清除过老的文件使分享链接失效才想找这么个缓存方案,不过还是感谢回复。
yaowentao227
50 天前
@mgrddsj 楼主找到方案了吗
mgrddsj
50 天前
@yaowentao227 #7 没有,后面也有别的事情要忙就没继续折腾这个了。现在分享主要还是手动把文件丢到服务器上再分享,硬盘快满了才清理一下旧的文件,链接也会失效,所以其实不算理想,但将就用着还行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/946240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX