跳到主内容

开源网盘搭建救不了你的私有存储?我先看外网访问这一步做没做对

同样叫开源网盘搭建,两个项目的仓库能差三个数量级:Nextcloud 的 server 仓库 7,321,518 KB(约 7.0 GB),Alist 只有 6,895 KB(约 6.7 MB)。选型、授权、外网访问这三步的坑都在下面。

起因:为什么非要自己搭

起因很俗:客户受够了公共网盘的会员、限速、提取码和文件已删除四件套。需求三条:文件在自己机器上、外面能访问、能给客户发链接。

前两条不难,难的是第三条。自建这套东西,90% 的返工都出在外网访问这一环:一放到公网,分享链接打不开、登录跳回内网地址、日志里全是反代 IP。

过程:先把网盘这个词拆清楚

我一开始把开源网盘当一个品类去找,搜出来的根本不是一回事。先拆定位:

  • 真·网盘(自己存文件、自己管用户):Nextcloud、ownCloud、Seafile、Cloudreve。
  • 对象存储:MinIO,S3 兼容,是存储后端不是网盘。
  • 聚合挂载:Alist,把已有存储挂到一处列目录,自己不存。
  • 目录管理界面:File Browser,给指定目录套一个 Web 界面。
  • 备份工具:Kopia,增量备份用的,别拿来当网盘。

照着功能多去选,多半是装上全家桶再关掉一半。取舍标准:你要的是存,还是看,还是转。

踩坑:选型和授权这两关

2026-10-15 用 GitHub REST API 拉的真实元数据,六个项目如下:

项目星许可证体积最后推送
minio/minio61,320AGPL-3.0125,263 KB2026-04-24
AlistGo/alist50,296AGPL-3.06,895 KB2026-10-13
nextcloud/server37,103AGPL-3.07,321,518 KB2026-10-14
filebrowser/filebrowser35,895Apache-2.024,323 KB2026-07-31
cloudreve/Cloudreve28,837GPL-3.08,932 KB2026-09-21
haiwen/seafile15,330NOASSERTION12,545 KB2026-10-10

一是许可证比想象中严。六个里三个 AGPL-3.0、一个 GPL-3.0,只有 File Browser 是 Apache-2.0。AGPL 的特点是网络交互也触发开源义务——自己用没事,包装成对外服务就得读条款。别凭开源等于随便用下判断。

二是 Seafile 的许可证 GitHub 显示 NOASSERTION。不是它没授权,是 GitHub 识别不出来。只认仓库里的 LICENSE 文件,别拿页面顶部那一行当结论。

三是看 pushed_at 而不只看版本。MinIO 最后推送 2026-04-24,比同表落后半年;File Browser 停在 2026-07-31。要评估跟主干还是钉版本,这个差值比星数有用。

解法:外网访问到底要配哪几项

以 Nextcloud 为例,官方反代文档里有几处跟流传做法不一样,我照官方原文核过:

trusted_proxies 必须显式写。官方要求显式定义受信任的代理地址,不写的话日志里客户端 IP 全是反代机器的地址。

forwarded_for_headers 别乱改。官方默认取 X-Forwarded-For(PHP 查找串 HTTP_X_FORWARDED_FOR),并明说配错可能让客户端伪造 IP。这个值取决于代理软件,不是抄来的。

最反直觉的一条:overwritehost 多数时候不需要设。官方最新文档的口径是多数场景下不需要——Nextcloud 会读取代理转发的 Host 头。老教程一上来就让你配,是过度配置。

真正会咬人的是 trusted_domains。官方写明:列多个域名时 Nextcloud 全接受,但分享链接、下载地址、通知链接会沿用当时访问所用的主机名。内网复制的链接,外网打不开。要统一就无条件设 overwritehost 加 overwrite.cli.url。

验证:拿什么判断这套能用

一,断开局域网,手机切 4G 打开域名,能登录才算通。只在本机浏览器验过不算。

二,传一个大文件再下载回来。拿 100 MB 左右的文件测,顺便看反代 client_max_body_size 有没有卡住——默认常是 1 MB,上传失败的报错还很含糊。

三,复制一个分享链接,粘到记事本里看域名。是公网域名就对了,是内网主机名就回去改 overwrite。

四,翻日志看客户端 IP。是真实出口 IP 说明转发头对了,是反代内网地址说明还没配好。

这套从外到内先核环境的顺序,开源论坛本地部署那篇说过。容器里连不上宿主机服务,通常是把 localhost 写进了配置——容器网络通病,HertzBeat 那次部署踩的是同一个坑。

源码与文档出处

  • Nextcloud:github.com/nextcloud/server,反代文档见官方 admin_manual 的 reverse_proxy_configuration 页
  • Cloudreve:github.com/cloudreve/Cloudreve
  • Seafile:github.com/haiwen/seafile
  • File Browser:github.com/filebrowser/filebrowser
  • Alist:github.com/AlistGo/alist
  • MinIO:github.com/minio/minio

说明:本次核的是仓库元数据与官方文档原文,没有在本机跑起来(本机无 Docker 环境),安装命令与依赖版本请以官方仓库最新说明为准。只想把大文件发给客户,拆分组装加云分享那条路轻得多——先划清工具边界再决定要不要自建。

常见问题

家里宽带没有公网 IP,还能外网访问吗?

能,但要换方案:内网穿透、有公网 IP 的云服务器中转,或者部署到云上。没有公网 IP 时路由器的端口映射无效,先确认再动手。

AGPL 项目公司内部用需要开源吗?

仅在内部使用、不对外提供服务的通常不触发义务;包装成对外服务(比如给客户开账号)就要按 AGPL 条款处理。具体以项目 LICENSE 文件与法律意见为准,本文不构成法律建议。

为什么分享链接发给别人打不开?

先看复制链接时用的是哪个域名。trusted_domains 列了多个域名时,Nextcloud 按当时访问的主机名生成链接,内网复制的链接就是内网地址。要统一就设 overwritehost 与 overwrite.cli.url。

仓库体积大会影响什么?

主要是 clone 时间、CI 耗时和磁盘占用,跟运行性能不是一回事。7 GB 的仓库在弱网别直接 clone,用 shallow clone 或拉 release 包。

选 Nextcloud 还是 Cloudreve?

要生态和插件选 Nextcloud(PHP 栈,仓库 7 GB,机器要有余量);要轻量、Go 单文件、部署快选 Cloudreve(8,932 KB)。团队没人维护 PHP 环境,强上 Nextcloud 后面会很累。

相关阅读

分享到:

本文链接:https://www.biyeyuanma.cn/post/328.html

服务热线

加我微信

加我微信