自建文件服务器有哪些选择? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn
V2EX    程序员

自建文件服务器有哪些选择?

  •  
      yodhcn
    yodhcn 2023-03-12 17:24:26 +08:00 4903 次点击
    这是一个创建于 1026 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在我有一个设想的方案:

    1. 当已授权用户需要请求某个目录中的文件时,需要先请求 Api 服务 "http://xxx.api.com/api/download_token?dir=DIRxxxxx" 拿到 token="TOKENxxxxx"
    2. 用户携带 token 访问文件服务 "http://xxx.file.com/file/DIRxxxxx/music.mp3?token=TOKENxxxxx",可以在该 token 过期前访问 "/DIRxxxxx" 下的所有文件

    请问需要实现至少 "下载、上传、token 鉴权"等 这些基本功能的自建文件服务器有哪些选择?

    PS: 不想使用对象存储,因为使用对象存储的文件在操作系统中不能直接读取。 希望使用原生文件系统实现,因为方便在操作系统的文件资源管理器中管理文件。

    24 条回复    2023-03-13 17:59:16 +08:00
    piku
        1
    piku  
       2023-03-12 17:26:18 +08:00 via Android   1
    为什么不搭一个私有云并开启 api 功能呢(比如 nextcloud
    shellus
        2
    shellus  
       2023-03-12 17:32:22 +08:00   1
    使用 minio 部署一个和阿里云 OSS 兼容的云储存服务,然后使用 OSS 挂载工具挂载为本地盘,既可以像云储存用法,也可以本地访问用法
    shellus
        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 鉴权功能。

    需要注意的是,以上这些文件服务器软件都是开源软件,你需要自己搭建服务器和配置相应的功能。在部署这些软件时,一定要注意安全性和权限控制,避免出现数据泄露等安全问题。
    lovelylain
        4
    lovelylain  
       2023-03-12 17:36:29 +08:00 via Android   1
    喜欢折腾的话 nginx+node.js
    yodhcn
        5
    yodhcn  
    OP
       2023-03-12 17:40:30 +08:00
    @shellus #2 "使用 OSS 挂载工具挂载为本地盘,既可以像云储存用法,也可以本地访问用法" 这部分能详细说说吗?这种配置方式对应文档里的哪一部分?我对 minio 了解的不是很多
    0o0O0o0O0o
        6
    0o0O0o0O0o  
       2023-03-12 17:43:23 +08:00 via iPhone
    yodhcn
        7
    yodhcn  
    OP
       2023-03-12 17:45:33 +08:00
    @yodhcn #5 我还是误解了,就算使用挂载工具,minio 存储的实现也不是原生文件系统实现的。
    "nginx 和 apache 都可以借助模块来实现鉴权" 这我还是第一次了解
    yodhcn
        8
    yodhcn  
    OP
       2023-03-12 17:48:36 +08:00
    @yodhcn #7 主要还是怕自己部署的 minio 哪天出问题了,导致数据读不出来
    Kinnice
        9
    Kinnice  
       2023-03-12 17:54:51 +08:00 via Android
    话说你这个需求还用得着什么什么文件服务器? 基本随便找个顺手的语言一会儿就搞定了吧。

    怕 minio 出问题导致数据读不出来,minio 是低冗余且磁盘损坏高容忍,换句话说如果 minio 出问题读不出来,你自己搞的什么依赖操作系统文件系统的更别指望了。
    shellus
        10
    shellus  
       2023-03-12 18:24:25 +08:00   1
    ngx_http_auth_request_module
    @yodhcn
    KevinBlandy
        11
    KevinBlandy  
       2023-03-12 19:19:19 +08:00   1
    直接用 go 的 http.ServeContent 写一个吧,自动处理啥缓存,Range 请求。自己也方便控制权限。
    renmu
        12
    renmu  
       2023-03-12 19:1:50 +08:00 via Android   1
    直接 smb ,简单易用稳定
    yodhcn
        13
    yodhcn  
    OP
       2023-03-13 00:32:28 +08:00
    @shellus #10
    这个模块好像需要 nginx-plus ,我现在在看 njs ,使用脚本也会更灵活些
    https://github.com/nginx/njs-examples#getting-arbitrary-field-from-jwt-as-a-nginx-variable-http-authorization-jwt
    forelegance
        14
    forelegance  
       2023-03-13 01:00:39 +08:00
    @renmu 特别容易被攻击
    dann73580
        15
    dann73580  
       2023-03-13 04:19:10 +08:00   1
    其实我没懂,minio 不开加密的话本地是明文按照存储桶的结果保存的,完全不存在不好读取的情况,可以轻松进行备份。你的担忧是不存在的。
    lovelylain
        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 。
    yodhcn
        17
    yodhcn  
    OP
       2023-03-13 10:32:16 +08:00 via Android
    @dann73580 请问你说的这个 minio 关闭加密,在文档的哪个部分有提到?怎么设置?
    yodhcn
        18
    yodhcn  
    OP
       2023-03-13 10:59:23 +08:00 via Android
    @dann73580 我正是需要这项配置,但我不知道在 Google 上该搜什么关键词
    dann73580
        19
    dann73580  
       2023-03-13 12:55:31 +08:00
    @yodhcn 用我的 minio 实例试了下,创建存储桶的时候直接选要不要加密即可,不加密的话用 sftp 可以看到正常的文件结构。
    hyqCrystal
        20
    hyqCrystal  
       2023-03-13 13:48:24 +08:00
    现在做的这个项目本打算用 minio 现在非要用 nfs
    lzrainchen
        21
    lzrainchen  
       2023-03-13 14:35:48 +08:00
    根据你的需求我个人觉得 filebrowser 比较符合你的需求,GitHub 上搜一下
    yodhcn
        22
    yodhcn  
    OP
       2023-03-13 14:40:52 +08:00
    @jobmailcn #16 我今天试了下 X-Accel-Redirect ,很方便。
    鉴权交给后端,具体的响应交给 Nginx ,我能不能这样理解?
    litguy
        23
    litguy  
       2023-03-13 17:14:32 +08:00
    对象存储自己的鉴权功能就可以,为啥非要 posix 兼容的文件方式呢
    lovelylain
        24
    lovelylain  
       2023-03-13 17:59:16 +08:00 via Android
    @yodhcn 是的,我一溜折腾下来,X-Accel-Redirect 是最适合文件分享需求的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2113 人在线   最高记录 6679       Select Language
    创意工作们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:09 PVG 00:09 LAX 08:09 JFK 11:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86