news 2026/8/21 22:10:12

5分钟上手:从零搭建个人 WebDAV 服务器的实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟上手:从零搭建个人 WebDAV 服务器的实战教程

5分钟上手:从零搭建个人 WebDAV 服务器的实战教程

【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav

webdav 是一个用 Go 语言编写的独立 WebDAV 服务器。部署之后,你把服务器上的一个目录挂载成个人云存储,手机、电脑就能同步文件,或者搭一块家庭共享盘。全文按"装好 → 验证 → 配置 → 权限 → 加固 → 服务化"的顺序推进,每一步都有可直接复制的命令。

🏠 WebDAV 服务器解决什么问题

场景一:手机拍了大量照片,想传到家里的机器上自动备份,但不想依赖商业网盘的容量和审核。场景二:全家共用一个 U 盘传电影,你想换成一块放在 NAS 或 VPS 上的共享目录。这两种情况都只需要一台能联网的机器,加上一个支持 WebDAV 的客户端,而这个项目就是那个服务器端。

🚀 WebDAV 服务器安装命令:Docker 三条命令跑起来

先准备一个存放共享文件的目录data,再写一个配置文件config.yml(第 4 节会逐项解释)。下面这条命令在后台启动容器,把 6065 端口映射出去,并把配置和文件目录挂进去:

docker run -d --name webdav \ -p 6065:6065 \ -v $(pwd)/config.yml:/config.yml:ro \ -v $(pwd)/data:/data \ ghcr.io/hacdias/webdav -c /config.yml

看到docker ps里出现 webdav 容器且状态是 Up,就算启动成功。不用 Docker 的话也可以选别的路:macOS 上brew install webdav,或执行git clone https://gitcode.com/gh_mirrors/we/webdav进入目录后go build自己编译,两种方式装完效果相同。

✅ 验证 WebDAV 服务器是否跑通

装完别急着配,先用 curl 发一个 WebDAV 协议自带的 PROPFIND 请求,确认认证和协议层都正常:

curl -i -u admin:admin -X PROPFIND http://127.0.0.1:6065/

响应头里出现HTTP/1.1 207 Multi-Status且正文是 XML,说明服务已就绪;换个错误密码会收到 401。更直观的验证是:macOS 里按⌘K选"连接服务器",填入webdav://127.0.0.1:6065,Windows 里直接把这个地址设为网络驱动器,能列出目录就算真正打通了。

⚙️ webdav 配置项说明:config.yml 怎么写

配置文件支持 YAML、JSON、TOML 三种格式,选你顺手的即可。下面这份是最小可用配置,改完保存后重启容器或进程生效:

address: 0.0.0.0 port: 6065 directory: /data behindProxy: false users: - username: admin password: admin permissions: CRUD

启动日志里出现监听 6065 端口的信息,且不再报配置错误,就是配置被正确读入的标志。各项含义如下:

配置项含义说明
address监听地址0.0.0.0表示外部 IP 也能访问,仅本机可用127.0.0.1
port服务端口建议选 1024 以上,避免和常见服务冲突
directory共享根目录用户能看到的文件都在这里,填绝对路径更稳
users账号列表一旦定义了用户,Basic 认证自动开启;每个用户还可以单独指定目录和权限
permissions该用户的默认权限不写时全局默认只有 R(只读)
behindProxy是否藏在反向代理后接了 Nginx 等代理必须设为true,否则日志里的客户端 IP 会是代理的地址

另外两个常用项:log.format可以切成json便于落盘分析,cors.enabled设为true才能让浏览器里的前端应用直接调它。

🔐 webdav 权限怎么设置:CRUD 四个字母的含义

权限用四个字母表示,可以任意组合,比如RC表示"能读、能新建,不能改不能删":

  • C:Create,在目录里新建文件和文件夹
  • R:Read,列出目录、下载文件
  • U:Update,覆盖写入已有文件
  • D:Delete,删除文件

全局给个默认值,再对特定路径追加规则,是更贴近实际的做法。下面这份规则的含义是:默认只读;/movies/这个文件夹可以增删改查;所有.mkv电影文件只许读。规则从列表末尾往前匹配,第一条命中的规则生效:

permissions: R rules: - path: /movies/ permissions: CRUD - regex: "^.+.mkv$" permissions: R

改完权限后用对应账号再连一次:在/movies/里建文件夹成功、对.mkv文件保存被拒绝,说明规则按预期工作了。

🛡️ 上线前安全清单:密码、Fail2Ban 与防火墙

对外网开放之前,把下面四件事过一遍。

1. 把密码从明文里挪走。密码有三档可选:明文只适合本地测试,上线前必须换掉;生产环境推荐 Bcrypt,用自带的命令生成哈希:

webdav bcrypt '你的密码'

命令会打印一行$2y$10$...形式的哈希,把它填进配置即完成加密,例如:password: "{bcrypt}$2y$10$..."。第三档是环境变量,账号密码整体不进配置文件:password: "{env}ENV_PASSWORD",适合密码由外部系统注入的场景。

2. 给登录加 Fail2Ban,自动封掉暴力破解的 IP。先在filter.d/webdav.conf里加匹配规则,让 Fail2Ban 能从日志里认出失败的登录并提取 IP:

[INCLUDES] before = common.conf [Definition] failregex = ^.*invalid password\s*\{.*"remote_address":\s*"<HOST>:\d+"\s*\} ^.*invalid username\s*\{.*"remote_address":\s*"<HOST>:\d+"\s*\} ignoreregex =

再在jail.d/webdav.conf里声明要监控的服务,端口和日志路径换成你自己的值:

[webdav] enabled = true port = 6065 filter = webdav logpath = /var/log/webdav.log banaction = iptables-allports ignoreself = false

执行sudo systemctl restart fail2ban,再用sudo fail2ban-client status webdav看到 jail 处于 running 状态,防护就算挂上了。

3. 用防火墙收窄来源。如果这个盘只给家庭网络用,就只放行内网段:

sudo ufw allow from 192.168.1.0/24 to any port 6065 proto tcp

命令执行完ufw status里出现这条规则即生效,其余 IP 直接进不来,和 Fail2Ban 形成两层。

4. 顺手把日志落成 JSON。log.format设为jsonoutputs指向日志文件,Fail2Ban 和事后排查都靠它。debug排查完就关掉,别长期开着,日志级别越高开销越大。

🌐 WebDAV 服务器和 Nginx 反向代理怎么配

代理层最容易踩的坑是头信息没转发全,导致 COPY、MOVE 这类操作报 502。下面这段 Nginx 配置把这些头补齐,记得把example.com换成你实际访问的域名,改完nginx -s reload

location / { proxy_pass http://127.0.0.1:6065; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; # 让 COPY / MOVE 正常工作:把 Destination 里的域名剥掉,只留路径 set $dest $http_destination; if ($http_destination ~ "^https://example.com(?<path>(.+))") { set $dest /$path; } proxy_set_header Destination $dest; }

同时记得把 webdav 配置里的behindProxy改成true。之后通过域名访问、重命名和移动文件都不再报 502,代理层就调通了。

📦 把 webdav 注册为 systemd 系统服务

裸跑进程重启服务器就没了。下面这段服务文件让它开机自启、挂掉自动拉起,保存为/etc/systemd/system/webdav.service

[Unit] Description=WebDAV After=network.target [Service] Type=simple User=root ExecStart=/usr/bin/webdav --config /opt/webdav.yml Restart=on-failure [Install] WantedBy=multi-user.target

执行sudo systemctl daemon-reload && sudo systemctl enable --now webdavsystemctl status webdav显示 active (running),服务化完成。

日常维护记住两件事就够了:升级版本时重新编译二进制或拉新镜像再重启服务,别拖着旧版本跑;日志按天滚动,磁盘别塞满。

这个项目适合手里有一台闲置机器或廉价 VPS、又不想为文件同步付订阅费的人。它就是一个单文件可执行程序,不依赖数据库,内存占用很低。配置上支持 YAML、JSON、TOML,认证和权限都能按目录和文件后缀细分。剩下的工作,就是照着上面的清单把配置改完、重启服务。

【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 22:08:20

SaaS系统用户权益升级Bug排查:从Max 20x失效看权限一致性保障

上周&#xff0c;我像往常一样&#xff0c;准备用某个AI工具处理一批积压的文档。系统提示我&#xff0c;作为Pro用户&#xff0c;我享有“Max 20x”的周处理额度。这听起来很美好&#xff0c;意味着效率能有质的飞跃。然而&#xff0c;当我开始连续处理几个稍大的文件后&#…

作者头像 李华
网站建设 2026/8/21 22:04:00

grepWin 多语言支持原理拆解:28 种语言是怎么做到的

grepWin 多语言支持原理拆解&#xff1a;28 种语言是怎么做到的 【免费下载链接】grepWin A powerful and fast search tool using regular expressions 项目地址: https://gitcode.com/gh_mirrors/gr/grepWin grepWin 是一款用正则表达式做全文搜索的桌面工具&#xff…

作者头像 李华
网站建设 2026/8/21 22:03:38

3D打印磁吸模块化移动电源:基于32140电池的DIY设计与实现

在电子设备小型化、模块化趋势日益明显的今天&#xff0c;为便携设备提供稳定、灵活且易于维护的供电方案&#xff0c;是许多创客和硬件开发者面临的挑战。传统的移动电源体积固定、接口单一&#xff0c;难以适应形态各异的DIY项目或需要频繁更换电池的测试场景。而将3D打印技术…

作者头像 李华
网站建设 2026/8/21 22:03:14

第一次见这么漂亮的出入库登记表!被领导夸了无数次

做仓库管理的人&#xff0c;大概都有一个共同感受&#xff1a; 出入库登记表看起来很简单&#xff0c;真正用起来却特别容易乱。 一张Excel&#xff0c;几十个字段挤在一起&#xff1a; 物料名称、规格、数量、仓库、经办人、日期…… 每天不断新增记录&#xff0c;月底还要…

作者头像 李华
网站建设 2026/8/21 22:00:07

hactool 完整指南:快速解析、解密并提取 Switch 游戏文件

hactool 完整指南&#xff1a;快速解析、解密并提取 Switch 游戏文件 【免费下载链接】hactool hactool is a tool to view information about, decrypt, and extract common file formats for the Nintendo Switch, especially Nintendo Content Archives. 项目地址: https:…

作者头像 李华