现在我有一个设想的方案:
请问需要实现至少 "下载、上传、token 鉴权"等 这些基本功能的自建文件服务器有哪些选择?
PS: 不想使用对象存储,因为使用对象存储的文件在操作系统中不能直接读取。 希望使用原生文件系统实现,因为方便在操作系统的文件资源管理器中管理文件。
1
piku 2023-03-12 17:26:18 +08:00 via Android 1
为什么不搭一个私有云并开启 api 功能呢(比如 nextcloud
|
2
shellus 2023-03-12 17:32:22 +08:00 1
使用 minio 部署一个和阿里云 OSS 兼容的云储存服务,然后使用 OSS 挂载工具挂载为本地盘,既可以像云储存用法,也可以本地访问用法
|
3
shellus 2023-03-12 17:34:18 +08:00
以下是 chatgpt 的回答,其实也挺靠谱,基本上那些 nginx 和 apache 都可以借助模块来实现鉴权:
如果你希望使用原生文件系统实现这些基本功能,可以考虑使用开源的文件服务器软件,比如以下几个: Apache HTTP Server:Apache 是一款非常流行的 Web 服务器软件,可以作为文件服务器使用。它支持多种操作系统和平台,包括 Windows 、Linux 、macOS 等。你可以通过 Apache 的模块来实现文件下载和上传功能,并结合 Apache 的认证模块实现 token 鉴权功能。 Nginx:Nginx 也是一款流行的 Web 服务器软件,支持 Windows 、Linux 、macOS 等平台。你可以使用 Nginx 的模块实现文件下载和上传功能,并结合 Nginx 的认证模块实现 token 鉴权功能。 FileZilla Server:FileZilla 是一个免费、开源的 FTP 服务器软件,可以支持文件上传和下载功能。你可以在 FileZilla Server 中设置用户账户和密码,实现基于账户密码的身份认证。对于 token 鉴权功能,你可以使用 FileZilla Server 的自定义脚本功能来实现。 vsftpd:vsftpd 是一个非常小巧、安全的 FTP 服务器软件,可以支持文件上传和下载功能。它可以在 Linux 和 Unix 系统上运行,并且具有很高的性能和可靠性。你可以使用 vsftpd 的认证模块实现基于账户密码的身份认证,也可以使用自定义脚本来实现 token 鉴权功能。 需要注意的是,以上这些文件服务器软件都是开源软件,你需要自己搭建服务器和配置相应的功能。在部署这些软件时,一定要注意安全性和权限控制,避免出现数据泄露等安全问题。 |
4
lovelylain 2023-03-12 17:36:29 +08:00 via Android 1
喜欢折腾的话 nginx+node.js
|
5
yodhcn OP @shellus #2 "使用 OSS 挂载工具挂载为本地盘,既可以像云储存用法,也可以本地访问用法" 这部分能详细说说吗?这种配置方式对应文档里的哪一部分?我对 minio 了解的不是很多
|
6
0o0O0o0O0o 2023-03-12 17:43:23 +08:00 via iPhone
|
7
yodhcn OP @yodhcn #5 我还是误解了,就算使用挂载工具,minio 存储的实现也不是原生文件系统实现的。
"nginx 和 apache 都可以借助模块来实现鉴权" 这我还是第一次了解 |
9
Kinnice 2023-03-12 17:54:51 +08:00 via Android
话说你这个需求还用得着什么什么文件服务器? 基本随便找个顺手的语言一会儿就搞定了吧。
怕 minio 出问题导致数据读不出来,minio 是低冗余且磁盘损坏高容忍,换句话说如果 minio 出问题读不出来,你自己搞的什么依赖操作系统文件系统的更别指望了。 |
11
KevinBlandy 2023-03-12 19:19:19 +08:00 1
直接用 go 的 http.ServeContent 写一个吧,自动处理啥缓存,Range 请求。自己也方便控制权限。
|
12
renmu 2023-03-12 19:21:50 +08:00 via Android 1
直接 smb ,简单易用稳定
|
13
yodhcn OP @shellus #10
这个模块好像需要 nginx-plus ,我现在在看 njs ,使用脚本也会更灵活些 https://github.com/nginx/njs-examples#getting-arbitrary-field-from-jwt-as-a-nginx-variable-http-authorization-jwt |
14
forelegance 2023-03-13 01:00:39 +08:00
@renmu 特别容易被攻击
|
15
dann73580 2023-03-13 04:19:10 +08:00 1
其实我没懂,minio 不开加密的话本地是明文按照存储桶的结果保存的,完全不存在不好读取的情况,可以轻松进行备份。你的担忧是不存在的。
|
16
lovelylain 2023-03-13 09:38:15 +08:00 via Android 1
@yodhcn #13 auth_request 我也折腾过,用于文件分享感觉不如 X-Accel-Redirect 好用,具体好像是因为我把授权路径加密放到了 token 里,要在验证接口里解密出来用于下一步 rewrite ,没记错的话是解决了一半有其他问题没解决。我折腾文件分享的过程是 secure_link -> X-Accel-Redirect -> auth_request -> X-Accel-Redirect 。
|
19
dann73580 2023-03-13 12:55:31 +08:00
@yodhcn 用我的 minio 实例试了下,创建存储桶的时候直接选要不要加密即可,不加密的话用 sftp 可以看到正常的文件结构。
|
20
hyqCrystal 2023-03-13 13:48:24 +08:00
现在做的这个项目本打算用 minio 现在非要用 nfs
|
21
lzrainchen 2023-03-13 14:35:48 +08:00
根据你的需求我个人觉得 filebrowser 比较符合你的需求,GitHub 上搜一下
|
22
yodhcn OP @jobmailcn #16 我今天试了下 X-Accel-Redirect ,很方便。
鉴权交给后端,具体的响应交给 Nginx ,我能不能这样理解? |
23
litguy 2023-03-13 17:14:32 +08:00
对象存储自己的鉴权功能就可以,为啥非要 posix 兼容的文件方式呢
|
24
lovelylain 2023-03-13 17:59:16 +08:00 via Android
@yodhcn 是的,我一溜折腾下来,X-Accel-Redirect 是最适合文件分享需求的
|