WebDAV是超文本传输协议(HTTP)的扩展,它允许用户像管理本地文件一样直接编辑和管理远程服务器上的文件。
本文使用开源项目https://github.com/hacdias/webdav来实现WebDAV,基于RockyLinux8.x系统环境,所以我这里下载对应的linux-amd64-webdav.tar.gz包。
1、下载WebDAV
|
1 |
wget https://github.com/hacdias/webdav/releases/download/v5.9.0/linux-amd64-webdav.tar.gz |
注:由于GitHub偶尔会出现连接问题,如遇网络问题,自行想办法下载。
2、解压缩并移动二进制文件
|
1 2 |
tar xf linux-amd64-webdav.tar.gz --one-top-level=linux-amd64-webdav mv linux-amd64-webdav/webdav /usr/local/bin/ |
3、创建webdav目录
|
1 |
mkdir -p /data/webdav |
4、创建配置文件
|
1 |
vi /etc/webdav.yml |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
address: 0.0.0.0 # 监听。 port: 6065 # 端口。 tls: false # TLS证书是否开启。 cert: cert.pem # TLS密钥,当TLS等于true时生效。 key: key.pem # TLS密钥,当TLS等于true时生效。 prefix: / # webdav路径前缀,默认/。 debug: false # 是否开启debug调试。 noSniff: false # 默认值false表示启用嗅探,增加安全性,服务器会尝试根据文件内容(而非仅扩展名)返回正确的Content-Type,如将 evil.exe伪装成的image.jpg识别为application/exe。 behindProxy: false #前置有代理时,应设置为true,直接暴露服务时用false。 directory: . # 全局用户目录。 permissions: R # 权限设置,参数不分大小写,C (创建), R (读取), U (更新), D (删除). 你可以自行组合权限,例如:要允许读取和创建权限,可以设置为“RC”,默认值为“R”。 rules: [] # 全局默认规则为空。 rulesBehavior: overwrite # 当overwrite(默认值)用户规则完全覆盖全局规则,当append用户规则追加到全局规则之后 log: format: console # 日志格式,默认console,可选json。 colors: true # 是否在日志中启用彩色输出,仅当format: console时生效。 outputs: # 日志输出目标,默认仅输出到标准错误流(stderr)。 - stderr - /var/log/webdav.log # 可配置同时写入日志文件。 users: - username: admin # 指定用户,自行定义。 password: admin # 指定用户密码,自行定义。 directory: /data/webdav # 指定用户根目录 permissions: CRUD # 用户权限设置,这里设置了CRUD,优先级高于全局的R。 rules: - path: /file permissions: none # 403禁止访问{user directory}/file |
注1:网上绝大部分文章所提供出来的config.yml都没有写入权限,配置完成启动webdav后仅能只读,这是因为permissions参数配置为R(只读)导致,详见上方参数注释。
注2:权限生效规则:
①如果用户有自己的权限规则,则完全忽略全局规则,仅使用用户自己的规则。
②如果用户没有定义规则,则继承全局的配置。
注3:更多配置参数,请参考webdav github。
5、配置启动服务
|
1 |
vi /usr/lib/systemd/system/webdav.service |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
[Unit] Description=WebDAV After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/webdav --config /etc/webdav.yml Restart=on-failure [Install] WantedBy=multi-user.target |
6、启动服务
|
1 2 3 4 |
systemctl daemon-reload systemctl enable webdav systemctl start webdav systemctl status webdav |
7、验证
我这里提供两种验证方式,Linux和Windows。
①对于Windows客户端验证比较容易,可以直接通过驱动器映射,也可以通过WinSCP等其他软件来实现,我这里使用winscp软件验证,驱动器挂载参见https://blog.whsir.com/post-8072.html。
下载并运行WinSCP软件,新建会话,选择WebDAV文件协议,配置相关的地址、端口、账号密码等即可,保存连接后,即可看到我们前面配置的/data/webdav目录内容。

②对于Linux来说,我这里通过davfs2软件,实现远程mount挂载。
|
1 2 |
dnf install epel-release -y dnf install davfs2 -y |
执行mount挂载命令
|
1 |
mount -t davfs -o noexec http://10.10.10.100:6065/ /mnt |
执行后输入webdav账号密码即可完成挂载。
8、nginx反向代理webdav(可选)
为了增加安全性,我们可以通过nginx配置TLS代理一层webdav,首选需要调整webdav参数,将address配置为127.0.0.1,behindProxy为true。
我这里以nginx1.28.0版本为例,conf配置如下,你仅需要更改对应的域名、域名证书即可,我这里仅作演示示例,你也可以结合自身需求调整对应参数,此处不再过多说明。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
server { listen 443 ssl; http2 on; #证书 ssl_certificate ssl/demo.whsir.com.pem; ssl_certificate_key ssl/demo.whsir.com.key; #ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS:!RC4; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; server_name demo.whsir.com ; 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; set $dest $http_destination; if ($http_destination ~ "^https://demo.whsir.com(?<path>(.+))") { set $dest /$path; } proxy_set_header Destination $dest; } } server { listen 80; server_name demo.whsir.com; return 301 https://demo.whsir.com$request_uri; } |
原文链接:基于go语言开源项目创建WebDAV服务,转载请注明来源!





