hacdias/webdav
使用 GitHub - hacdias/webdav: Simple Go WebDAV server.。
该项目简单易配置。不过在高并发下,可能容易崩溃,可见 crash at high concurrency · Issue #85 · hacdias/webdav。
下载对应版本,如 amd64 架构选择 linux-amd64-webdav.tar.gz,并解压。webdav
文件即程序本体。
在同目录内创建一个配置文件 config.yaml
。基础配置如下
address: 0.0.0.0 # 监听地址,外网访问则设置为公网 IP,局域网访问则设置为软路由 IP(默认 0.0.0.0 也可)
port: 1000 # 监听端口
auth: ture # 是否开启验证
tls: false # 是否开启 TLS
prefix: / # 地址前缀,"/" 指访问地址为 “http(s)://address:port/”
debug: false # 是否开启查错模式,日常使用无需开启
scope: . # 监听目录,"." 指在当前目录下
modify: true # 是否开启修改权限
# 若 "auth" 为 "true",则需要设置用户来鉴权
users:
- username: admin
password: admin
启动测试一下
./webdav -c config.yaml
若终端中如此显示,则 WebDAV 正常运行。
配置文件
配置文件支持 JSON、YAML 和 TOML 格式。完整的配置示例可见 Usage。
TLS 配置
此时 WebDAV 默认使用 http 协议,若要使用 https 协议,需要配置 TLS 加密。
-
若仅在局域网内使用,见局域网SSL认证 - 知乎。大致流程为
- 在宿主机上自建 CA 机构
- 自签 TLS 证书
- 使用并分发 TLS 证书
然后配置
tls: true # 开启 TLS
cert: /root/webdav/cert.pem # 证书文件路径
key: /root/webdav/key.pem # 私钥文件路径
开启 CORS
cors:
enabled: true
credentials: true
若需要详细配置,例如
cors:
enabled: true
credentials: true
allowed_headers:
- Depth
allowed_hosts:
- http://localhost:8080
allowed_methods:
- GET
exposed_headers:
- Content-Length
- Content-Range
见 hacdias/webdav: Simple Go WebDAV server.。
多用户权限控制
users:
- username: admin
password: admin # 默认使用明文
scope: /a/different/path # 目录
- username: encrypted
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi" # 使用 bcrypt 加密
- username: basic
password: basic
modify: false
rules:
- path: /dir1/file
allow: false # 是否允许访问
- path: /dir1/dir2/
modify: true # 是否允许修改
开机自启
OpenWrt 的 /etc/init.d
中存储着系统加载的开机配置,目录中的每个文件都代表一个 service。开机时,系统读取 etc/init.d
中的配置文件,根据 START 优先级,依照顺序执行每个文件 start()
函数内的命令。
其他 Linux 系统,可用
systemd
,一个示例见 webdav.service.example。
创建 /etc/init.d/webdav
,有两种配置风格:SysV 和 procd,这里使用 procd(可见 OpenWrt的开机启动服务(init scripts) - Milton - 博客园)
#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
BINLOADER_BIN="/root/webdav/webdav" # webdav 目录
start_service() {
procd_open_instance
procd_set_param respawn
procd_set_param command "$BINLOADER_BIN" -c /root/webdav/config.yaml # 最后为 config 文件目录
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
stop_service() {
return 0
}
restart() {
stop
start
}
赋予可执行权限
chmod +x /etc/init.d/webdav
设置开机自启动并现在启动
service webdav enable
service webdav start
可以通过 service webdav info
或 service | grep webdav
查看是否成功运行。
Lighttpd
Caddy
Caddy 现在是 v2 版本,相比于 v1 更庞大,单纯启用 WebDAV 时似乎不如 v1 好用,且配置语言语义有所变化。