夜雨聆风学习资料网

ARTICLE · 1113024

静听使用说明|电脑或服务器自建 WebDAV

静听使用说明|电脑或服务器自建 WebDAV

系列第 03 篇。音乐在电脑或服务器上,想自己提供一个 WebDAV。接进静听的操作见第 05 篇。

本篇以 rclone 为主线写完整流程,因为它跨 Windows、macOS、Linux,官方文档也把认证、只读和 HTTPS 参数写得很清楚。其他方案只做选型提醒。

为什么推荐 rclone

方案
平台
建议
rclone serve webdav
全平台
本文主线,适合本机目录和 rclone 已支持的网盘
Docker WebDAV 镜像
全平台
已有 Docker 环境时可用,参数跟随所选镜像文档
WsgiDAV
全平台
适合熟悉 Python 和配置文件的人,不能照搬匿名示例到局域网或公网
Windows IIS WebDAV
Windows
能用,但要同时处理 WebDAV 发布、认证、请求筛选和 MIME 映射
Nginx 内置 DAV 模块
Linux
不适合单独当通用 WebDAV 服务端
,缺少 PROPFIND

推荐路线:rclone serve webdav

第一步:安装 rclone

从 rclone 官网下载对应平台的版本,或者用你系统的包管理器安装。

第二步:起服务

把音乐目录暴露出去,一条命令:

rclone serve webdav \  --addr :8080 \  --user jingting \  --pass '换成一个足够长的密码' \  --read-only \  /path/to/your/music

第三步:先改对 --addr(最容易踩的坑)

rclone 默认只监听本机。 要让手机访问,需要用 --addr :8080 监听所有网卡,或明确写这台电脑的局域网 IP。

--addr 的默认值是 127.0.0.1:8080。也就是说:

写法
结果
不写 --addr
只有本机能访问,手机连不上
--addr 127.0.0.1:8080
同上,只有本机
--addr :8080
监听所有网卡,手机能连 ✅
--addr 192.168.1.10:8080
只监听这个地址

这是自建方案里最常见的失败原因:本机浏览器能打开,手机报「WebDAV 连接失败」。先查这一行。

第四步:参数含义(官方文档原文对齐)

参数
官方说明
--addr
监听地址,格式 IP:Port 或 :Port;默认 127.0.0.1:8080
--user
 / --pass
设置单个用户名和密码
--htpasswd
用 htpasswd 文件,可放多个用户。Apache 标准格式,支持 MD5、SHA1、BCrypt,官方推荐 BCrypt
--realm
设置认证的 realm
--read-only只允许只读访问
--no-modtime
不读写修改时间,可以加速
--no-checksum
上传下载时不比较校验和
--no-seek
不允许在文件中寻址
--baseurl
设置 URL 前缀,配合反向代理时有用
--cert
 / --key
启用 HTTPS,需要 PEM 格式的证书与私钥
--client-ca
需要验证客户端证书时使用
--min-tls-version
可接受的最低 TLS 版本

关于认证,有一条必须知道:rclone serve webdav 默认不要求登录。 一旦监听局域网或公网地址,就应同时加认证。给静听使用时,--user、--pass、--read-only 三个参数一起加,是最省事也更安全的组合。

第五步:如果要多用户,用 htpasswd

touch htpasswdhtpasswd -B htpasswd userhtpasswd -B htpasswd anotherUser

官方说明:密码文件可以在 rclone 运行时更新。

第六步:先在本机验证,再碰手机

在起服务的那台机器上,用浏览器打开:

http://127.0.0.1:8080

弹出账号密码框、能列出目录,说明服务端是好的。这一步的价值在于把问题一分为二:

  • 本机能通、手机不通 → 问题在 --addr、防火墙或网络(见第 06 篇)

  • 本机都打不开 → 服务端没起来,先解决这个

第七步:放行防火墙

  • macOS:首次运行会弹窗询问是否允许接受传入连接,选允许。「系统设置 → 网络 → 防火墙」里也能检查。

  • Windows:首次运行 Defender 防火墙弹窗,勾选允许(专用网络即可)。

  • Linux:检查 ufw / firewalld / iptables,放行你用的端口。

顺带说一个 Windows 上的官方细节。如果你打算在 Windows 上把 WebDAV 映射成网络驱动器来验证,Windows 默认会拒绝非 SSL 的 Basic 认证连接,而且不会有任何提示。需要把注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel 设为 2,然后重启 WebClient 服务。官方文档在「Access WebDAV on Windows」一节有完整说明。

第八步:HTTPS 与证书

用 --cert 和 --key 就能让 rclone 直接跑 TLS,两个文件都要求 PEM 格式。官方还提醒:配了 TLS 之后,--addr 给出的每个监听地址都会走 TLS;如果想让某个地址保持明文 HTTP,可以给它加 http:// 前缀。

实际取舍:

  • 只在家里局域网听 → 用 http:// 就够。静听的 iOS 端已开放明文 HTTP 访问。

  • 要做公网访问 → 建议用可信证书。自签证书 iOS 默认不信任,套一层反向代理用域名申请正式证书是常见做法。

第九步:拿到三个值

信息
取值
服务器地址
http://设备IP:8080
(监听的端口是多少就写多少)
用户名
--user
 指定的值
密码
--pass
 指定的值

设备 IP 这样查:macOS / Linux 用 ifconfig 或 ip addr,Windows 用 ipconfig。

在静听里合起来填成一条:

http://192.168.1.10:8080

然后按 第 05 篇 [1] 操作。

rclone 还能直接服务网盘

上面服务的是本机目录。但 rclone 本身支持大量网盘后端,所以它也能直接把一个网盘挂成 WebDAV:

rclone serve webdav myremote:音乐 --addr :8080 --user jingting --pass '密码' --read-only

也就是说,如果你的网盘正好是 rclone 支持的那几种,你未必需要装 OpenList。区别在于:

  • rclone 更偏命令和自动化,适合已经在用 rclone 的人。

  • OpenList 有网页界面,添加存储、管理文件都在浏览器里点,门槛更低。

两者不冲突。命令里的 myremote:音乐 需要先用 rclone config 配好 remote。

服务网盘时,下面两个 VFS 参数会明显影响体验(服务本机目录时影响很小):

参数
默认值
作用
--dir-cache-time5m0s
目录列表缓存时间,官方说明:云盘侧的变化要等缓存过期才会被看到
--vfs-read-chunk-size128Mi
按块读取源对象
--vfs-read-chunk-streams0
大于 0 时并行读取多个数据块;只在高延迟或高带宽链路上按实测调整

自建方案特有的坑

电脑睡眠,服务就断了。 这是自建和 NAS 最大的差别。笔记本合上盖子、进入睡眠,WebDAV 立刻不可用,表现为播放中途失败。想长期用,需要接电源并关闭自动睡眠。

内网 IP 会变。 路由器重新分配的地址一变,昨天能连今天就连不上。在路由器里给这台机器绑定固定 IP(DHCP 静态分配)可以永久解决。

默认没有密码。 这一点值得再说一次:rclone 官方文档明确写了默认不需要登录。只要你把 --addr 改成监听所有网卡,就一定要同时加 --user/--pass。

注意暴露范围。 只暴露音乐目录本身,用 --read-only 加独立账号,不要把整个家目录或系统盘挂出去。

远程播放仍然受网络和服务器配置影响。 自建 WebDAV 的速度取决于这台机器的上行带宽。静听不做「任何网络下都能稳定播放」的承诺。

其他可选方案

如果 rclone 不符合你的环境,再考虑下面几种。它们不是本文推荐的新手路线。

WsgiDAV(Python):官方 CLI 支持 --host、--port 和 --root,但文档中的最短示例使用匿名访问,而且默认可写。要给静听长期使用,应改用配置文件开启账号认证、只读权限和 HTTPS,不能把匿名示例直接暴露到局域网或公网。

Windows IIS 的 WebDAV:IIS 可以启用「WebDAV 发布」功能。遇到某些音频文件返回 404 时,先看 IIS 日志的子状态:404.3 通常指向 MIME 映射,404.7 指向被请求筛选拒绝。还要确认 Request Filtering 是否允许 WebDAV 处理文件扩展名。

Nginx:官方 ngx_http_dav_module 只处理 PUT、DELETE、MKCOL、COPY、MOVE,不包含文件列表所需的 PROPFIND。因此只开这个模块,静听通常列不出目录;需要额外的完整 WebDAV 实现。不建议新手从这里开始。

Docker 的 WebDAV 镜像:如果你已经在用 Docker,也有现成的 WebDAV 镜像可用,配置方式和 OpenList 类似(映射端口和数据卷)。镜像的选择和参数以你选用的镜像文档为准。

来源

  • rclone 官方文档「rclone serve webdav」(--addr 默认值与只监听本机、认证默认关闭、--read-only、--no-modtime、--htpasswd 与 BCrypt 建议、TLS 参数、Windows 注册表 BasicAuthLevel、VFS 缓存与读取参数):https://rclone.org/commands/rclone_serve_webdav/ [2]

  • WsgiDAV 命令行接口:https://wsgidav.readthedocs.io/en/latest/user_guide_cli.html [3]

  • Microsoft IIS WebDAV 请求筛选:https://learn.microsoft.com/en-us/iis/publish/using-webdav/how-to-configure-webdav-with-request-filtering [4]

  • Microsoft IIS 404 子状态说明:https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/site-behavior-performance/troubleshoot-404-file-not-found-error [5]

  • Nginx ngx_http_dav_module 官方文档:https://nginx.org/en/docs/http/ngx_http_dav_module.html [6]

相关学习资料