尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

webdav 轻量级 WebDAV 服务器:从安装到生产部署的完整路径

webdav 轻量级 WebDAV 服务器:从安装到生产部署的完整路径 webdav 轻量级 WebDAV 服务器从安装到生产部署的完整路径【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdavwebdav 是一个用 Go 编写的轻量级 WebDAV 服务器编译后就是一个独立二进制文件没有依赖数据库也无需其他运行时。它解决的问题很直接把一个目录通过 WebDAV 协议暴露出去配合 Basic 认证和 CRUD 权限规则让 Windows、macOS、Linux 甚至手机上的文件管理器都能直接挂载使用。适合个人同步、小团队共享、Android 备份这类不需要重型文件系统的场景。适用场景什么时候该用 webdav先判断它是否匹配你的需求再动手部署私有文件同步在多台机器之间映射网络驱动器不依赖云盘服务Android 设备备份搭配 SeedVault 这类应用用 WebDAV 作为备份目标仓库 README 中专门给出了对应的用户配置示例办公文档共享给不同成员分配不同目录与权限最小配置就能落地轻量自动化webdav 还支持兼容 SabreDAV 的PATCH局部更新扩展请求使用application/x-sabredav-partialupdate内容类型并携带X-Update-Range支持bytesstart-end、bytesstart-、bytes-N、append等取值适合大文件断点式写入的客户端约定。它不适合需要复杂审计、版本管理或高并发公网服务的场景这类需求应选专业文件服务器。快速开始三种安装方式与最小配置装好二进制后一条命令加一个配置文件即可启动。默认监听0.0.0.0:6065默认只读权限R。方式一Go 工具链go install github.com/hacdias/webdav/v5latest方式二HomebrewmacOS/Linuxbrew install webdav方式三Docker 镜像docker pull ghcr.io/hacdias/webdav:latest # 或 docker pull hacdias/webdav:latestDocker 的最小运行命令如下配置文件以只读方式挂入docker run \ -p 6065:6065 \ -v ./config.yml:/config.yml:ro \ -v ./data:/data \ ghcr.io/hacdias/webdav -c /config.yml最小可用配置config.ymladdress: 0.0.0.0 port: 6065 directory: /data permissions: R users: - username: admin password: admin注意一个容易踩坑的行为配置中只要定义了usersBasic 认证就会自动启用不定义任何用户服务器是完全匿名的。内网试用可以接受公网部署务必加上用户。命令行还常用这些参数-c指定配置文件-a监听地址-p端口-t开启 TLS--cert/--key指定证书-P设置 URL 前缀。所有参数也可以用WD_前缀的环境变量覆盖例如WD_CERT。不带-c时程序会在当前目录和/etc/webdav/下查找config.yml也支持 JSON、TOML。关键配置目录、认证与最小权限规则这一节解决谁能读写哪些文件。权限由四个字母组成C创建、R读、U更新、D删除可自由组合如RC、CRUD。给不同角色划目录每个用户可以用directory指定自己的根目录超出范围不可见。团队文档共享可以这样分层users: - username: manager password: {env}MANAGER_PASSWORD permissions: CRUD directory: /data/team - username: developer password: {env}DEV_PASSWORD permissions: RU directory: /data/dev密码支持三种写法明文、{bcrypt}$2y$...哈希用内置命令webdav bcrypt生成以及{env}变量名从环境变量读取。生产环境建议后两者避免密码进配置文件版本库。用 rules 做路径级控制全局权限之外的精细控制靠规则每条规则二选一——按path前缀匹配或按regex正则匹配相对路径以用户目录为起点permissions: R rules: - path: /confidential permissions: none - path: /public/access/ permissions: CRUD - regex: ^..pdf$ permissions: RU两个必须知道的行为细节规则从最后一条往前匹配命中的第一条规则即生效所以把更具体的规则写在后面permissions: none表示显式拒绝比不给权限更可靠适合封禁敏感目录。用户自己定义了 rules 时行为由rulesBehavior决定overwrite默认全局规则对该用户不生效或append用户规则优先检查再回落到全局规则。多目录挂载把单个directory换成directories可以把多个不相干的目录虚拟挂载为一个根下的多个入口directory与directories不可同时使用directories: - media: /data/media - /data/archive - name: backups path: /data/backups生产部署TLS、反向代理与防暴力破解TLS 直接终结在 webdav 上配置tls: true并指定cert/key文件路径即可也可以交给前置代理做 HTTPS。Nginx 反向代理的两个关键点一是必须转发X-Real-IP、X-Forwarded-For、Host等头否则容易出现 502二是COPY/MOVE操作依赖Destination头而客户端通常会带上完整 URL含域名需要在代理层剥掉域名只留路径否则搬运会失败location / { proxy_pass http://127.0.0.1:6065; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; set $dest $http_destination; if ($http_destination ~ ^https://example.com(?path(.))) { set $dest /$path; } proxy_set_header Destination $dest; }Caddy 则可用header_regexp匹配dest头并重写Destination思路相同。如果代理在中间记得把behindProxy设为true让日志按X-Forwarded-For记录真实客户端地址。systemd 服务化实现开机自启与崩溃重启[Unit] DescriptionWebDAV Afternetwork.target [Service] Typesimple Userroot ExecStart/usr/bin/webdav --config /opt/webdav.yml Restarton-failure [Install] WantedBymulti-user.targetFail2Ban 防暴力破解webdav 的日志中会输出invalid password/invalid username记录JSON 格式含remote_address字段可据此写过滤器。在filter.d/webdav.conf中匹配这两类记录并提取HOST再在jail.d/webdav.conf里配置对应端口与日志路径Docker 部署时建议加--log-driver journald --name webdavjail 中用journalmatch CONTAINER_NAMEwebdav代替文件路径。另外log.format可切到json便于机器采集log.outputs支持多个输出目标。常见问题与排查思路按出现频率排序现象原因处理连接后全部 405/403默认权限是R只读配置permissions: CRUD或按目录放宽 rules反向代理后 COPY/MOVE 报错Destination头带域名未处理参照上文 Nginx 重写逻辑公网出现 502代理层请求头不完整补全X-Real-IP、Host等转发头没有认证、目录裸奔配置里没写users至少定义一个用户启用 Basic 认证规则不生效规则从后往前匹配检查书写顺序具体规则放后面大文件写入失败客户端未走局部更新确认使用X-Update-Range协商见仓库 README 的 Partial updates 一节认证逻辑本身也可以整体外包如果你的网关已做鉴权用noPassword: true关闭 webdav 的密码校验直接信任 Basic 头里传来的用户名。源码结构速览代码量不大想看实现可以直接从这几个文件入手以当前项目版本为准lib/config.go配置解析、默认值与WD_环境变量映射lib/permissions.goCRUD 权限模型与 rules 匹配逻辑lib/handler.go、lib/locksystem.goHTTP 处理与 WebDAV 锁机制lib/partial_update.goSabreDAV 局部更新扩展cmd/root.go启动流程、信号处理与 socket 监听支持 systemd socket 激活和 Unix socket。下一步建议先在内网按快速开始一节把匿名服务跑起来验证客户端挂载再补上用户、bcrypt 密码和 Fail2Ban最后套一层 Nginx 上 HTTPS即可作为长期使用的私有文件服务。【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表