家里有一台 NAS ,存储了不少文件,但家宽的低上传带宽、非标端口、家宽 Web 服务敏感等问题使我一直没有用它直接分享文件给别人。
我现在分享文件基本都是通过搭建在一台云服务器上的 File Browser 进行的,上传文件→分享→发送链接给朋友,使用体验还是相当满意的。不像国内网盘要登录+下载客户端才能下载 /在线播放视频,还“不限速”。但是云服务器的空间有限,一般系统盘就只有几十 GB ,付费扩容又感觉没什么必要(毕竟家里已经有 NAS 了)。
我当然可以定期清理很久之前共享的文件,毕竟很多录屏等内容是有时效性的,聊天话题过去了就基本不会点开第二次了。但我个人并不喜欢“链接会过期”这个概念,大概是数据仓鼠的一个体现吧,但数据就这样“丢失”了会让我感到难受。况且这些文件我大概率会在 NAS 上有备份。
所以我就想找这么个文件缓存服务器,能够打通我的云服务器和 NAS 。新的文件缓存在云服务器上供快速访问,达到某个阈值(存储空间限制 /访问频率)后删除云服务器上的缓存。缓存被删除的文件再次被访问到时就“回源”,从 NAS 上拉取,并缓存一段时间。
某种意义上,这有点像品牌 NAS 自带的 SSD 缓存功能,把一些最近常用的文件存到 SSD 里,HDD 当仓库盘。但我想要的是远程的、可自建的。
文件共享这块的网页前端操作起来最好要简单,因为如果搭好了,我是打算让家里人用的,让他们基本完全摆脱国内网盘(除了下载别人共享的文件,这个没太大办法)。
配置 Nginx 当反代和当网页服务器我还算熟悉,但反代+缓存的配置我是还没有接触过的。
稍微看了一下 Nginx Content Caching 的文档,似乎是我要找的东西。但是我有几个疑问:
像 File Browser 和 QNAP File Station 这样的网盘服务生成出来的分享链接都是动态的一串 hash ,这种情况能正常缓存吗?
试了一下 File Browser 共享出来的文件(无密码),文件是存放在 /api/public/dl/HASH
下的,但 DevTools 显示 Cache-Control 为 private
,这种情况下,Nginx 似乎是不能缓存这个内容的吧?
这种缓存似乎得在创建分享链接后先访问 proxy_cache_min_uses
次,才能缓存到?所以我每次分享完还得最少手动访问一次才能缓存成功?不然我朋友访问第一次就是回源,会很慢吧。
如果有朋友用过这种方案,可以分享下心得吗?感谢!
Rclone 在 mount 一个 remote 的时候,是可以设置 cache 的,感觉像是挺适合我的使用场景的。
不过我之前在 Windows 上用 Rclone + WinFsp 的体验并不是特别好,有时连接不是很稳定会导致挂载的盘卡死。不知道在它的主要平台 Linux 上表现会不会好一点。
如果 OK 的话,感觉 Rclone mount + File Browser 是个可行的选择。不知道是否有人有相关经验?或许过几天我有空可以试一下。
但我也有一个担心:因为对于 File Browser 来说,mount 出来的是本地存储,在回源的时候延迟高一点的话不知道会不会直接请求失败。
看文档有提到缓存配置,就在之前搭好的 Alist 上用 WebDav 挂载了 NAS 试了一下,它似乎没法满足我的要求:
存储无法自定义缓存大小,只能设置缓存到期时间,不知道是否有可能吃满服务器硬盘。
缓存的似乎不是文件内容,而只是文件目录结构。监控服务器流量发现每次下载文件都在从 NAS 下载。
Alist 本质上是个文件列表程序,似乎更适合共享大量文件,而不是每次创建不同的共享(?)。我自己使用的体验是,共享单个文件没问题。但如果想共享单个文件夹并设置访问密码,但又不想 guest 帐户获取整个文件列表,那就得配置元信息。但要配置元信息对家人使用来说就不太友好了。不知道是我使用方法不对,还是本身就不是为这样的使用场景设计的。我希望能有 File Browser 那种简单的“网盘式”创建分享的体验。
如果实在不行,我或许可以自己写一个这样的项目来练练手,不过如果现有方案能工作就最好了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.