使用 WebDAV 作为文件服务

在传统的文件服务中,最容易想到的就是 FTP 服务。但是 FTP 有其不足,如明文传输,Google 也从 Chrome v82 起彻底停止支持 FTP 功能。FTPS 虽然安全但需要配置证书,也需要区分控制端口和数据端口,对于防火墙配置不够友好。SFTP 需要基于 SSH 用户,防火墙不一定会允许开放相关端口。

其中一个替代方案就是 WebDAV (Web Distributed Authoring and Versioning),并且有其优势:

  • 基于 HTTP,容易穿越防火墙
  • 可以使用 HTTPS 来传输数据
  • 可以通过 Nginx 或 Apache 等 Web 服务器部署,也可以通过这些反向代理暴露服务
  • 在客户端 WebDAV 获得了许多软件的支持,比如 Office 可通过 WebDAV 编辑远程文档

除了可以通过 Nginx 或 Apache 等 Web 服务器部署 WebDAV 服务,这里再提供个简易工具 hacdias/webdav

下载可执行文件,配置文件放到相同目录下,运行程序即可。

配置:

# 服务相关配置
# 绑定的 IP
address: 0.0.0.0
# 端口
port: 0
# 是否需要支持授权
auth: true
# 是否需要 TLS 安全保护
tls: false
# 证书
cert: cert.pem
# 私钥
key: key.pem
# URL 前缀
prefix: /

# 默认用户设置,这里的设置会被用户个性化设置覆盖
# 默认用户的访问目录
scope: /default_webdav_path
# 是否允许修改
modify: true
# 规则
rules: []

# 用户设置
# 这里是个数组,每个为每个用户做不同设置
# 这些设置会覆盖前面的默认用户设置
users:
  - username: admin
    password: admin
    # 用户的访问目录
    scope: /a/different/path
    # 以加密形式设置用户信息
  - username: encrypted
    password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
    # 通过环境变量读取用户信息
  - username: "{env}ENV_USERNAME"
    password: "{env}ENV_PASSWORD"
  - username: basic
    password: basic
    modify:   false
    rules:
      - regex: false
        allow: false
        path: /some/file
      - path: /public/access/
        modify: true

(完)