跨平台文件传输:WebDAV + Rclone
在集成流水线时,我曾遇到需要跨平台传输文件的场景(服务器需要与其他平台进行文件交互)。虽然 OpenSSH(scp/sftp)是最简便的方案,但公司出于安全策略,禁止机器间通过 OpenSSH 进行文件传输。因此我尝试了 NFS/SMB、临时 HTTP 共享等多种方式,但均因安全策略限制或配置复杂未能落地。
最终我采用了 WebDAV + rclone 的组合方案实现跨平台文件传输:
- 使用 WebDAV 共享目标机器的目录;
- 通过 rclone 对共享目录进行稳定的读写操作。
该方案适用于内部工具场景,非部署生产环境。实际使用中,我以测试机/工作机(macOS/Windows)作为 WebDAV 服务端,在另一台 macOS 服务器上通过 rclone 对测试机进行文件的上传、下载与管理,实现了稳定、轻量、符合公司安全规范的跨平台文件互通。
实现步骤
Apache
用Apache开启webdav服务非常方便,macOS平台自带Apache,Windows需要自己下载安装(下载-安装-配置环境变量)。
Windows
- 打开:https://www.apachelounge.com/download/,下载对应系统的版本
- 解压到一个无空格、无中文的目录(比如 D:\Apache)
- 打开配置文件(D:\Apache\Apache24\conf\httpd.conf)
# 找到并修改 ServerRoot(必须与解压路径一致) Define SRVROOT "D:/Apache/Apache24" ServerRoot "${SRVROOT}" # 找到 Listen 80,可改为其他端口(如 8080)避免冲突 Listen 8080 # 在配置文件末尾添加一行,端口必须对应 ServerName 127.0.0.1:8080- 管理员打开cmd,测试配置是否正确
cd /d D:\Apache\Apache24\bin httpd -t -> Syntax OK- 启动 Apache
管理员cmd:
httpd -k start :: 初次 httpd -k restart :: 重启 :: 或注册为Windows服务,作为后台服务 httpd -k install net start Apache2.4浏览器访问:http://localhost:8080,看到“ It works! ”即成功。
- 若修改配置,需要重启httpd才能生效
httpd -t :: 检查语法 httpd -k restart :: 重启 :: 或注册为Windows服务 net stop Apache2.4 :: 停止服务 httpd -t :: 检查语法 net start Apache2.4 :: 重启Webdav
下面主要记录Windows下开启webdav的步骤,macOS上步骤相同,操作不同,macOS的共享文件最好创建在Shared目录下。此外不设置账号和密码,允许匿名登录,若要设置账号密码,修改相关配置即可。
开启 WebDAV 模块
在httpd.conf中启用以下模块(去掉行首#):
LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so # 用于密码认证 LoadModule authn_file_module modules/mod_authn_file.so LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authz_core_module modules/mod_authz_core.so创建共享目录
管理员cmd:
mkdir D:\webdav_share :: 共享目录 mkdir D:\Apache\Apache24\var :: 对应配置中的 DavLockDB 路径 共享目录权限配置
D盘一般可以跳过这一节:
- 右键 D:\webdav_share → 属性 → 安全 → 编辑 → 添加;
- 输入 Everyone → 确定 → 勾选 “完全控制、修改、读取和执行、列出文件夹目录、读取、写入”;
- (optional)若 Apache 以服务运行,需给 SYSTEM 或 Apache2.4 服务账户赋相同权限。
创建独立的WebDAV配置文件
cd /d D:\Apache\Apache24\conf :: 新建 extra 文件夹(仅当不存在时创建) if not exist "extra" mkdir extra :: 进入 extra 目录 cd extra :: 创建webdav配置文件 type nul > httpd-webdav.conf :: 打开配置文件 notepad httpd-webdav.conf打开WebDAV配置文件,拷贝如下内容:
Define SRVROOT "D:/Apache/Apache24" DavLockDB "${SRVROOT}/var/DavLock" Alias /webdav "D:/webdav_share" <Directory "D:/webdav_share"> Dav On DavDepthInfinity On DavMinTimeout 600 Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> 若要让 WebDAV 支持Rclone大文件传输(几百Mb的文件已经算是大文件了),则必须解除 Apache 对请求体大小、上传分块(chunk)的限制,关键配置是 LimitRequestBody(控制请求体大小)和 DavMaxRequestSize(WebDAV 专属的请求大小限制)。配置文件中添加如下内容:
# 1. 解除请求体大小限制(0 = 无限制,单位:字节) LimitRequestBody 0 # 2. WebDAV 专属:解除请求大小限制(无上限) DavMaxRequestSize 0 # 3. 延长超时时间(避免大文件传输超时,单位:秒) TimeOut 3600 # 4. 关闭分块传输限制(兼容旧客户端) EnableSendfile Off EnableMMAP Off 引入主配置文件
打开 ~\Apache24\conf\httpd.conf,在文件末尾添加一行:
Include conf/extra/httpd-webdav.confhttpd检查语法并重启
管理员cmd:
httpd -t :: 检查语法 httpd -k restart :: 重启 :: 或注册为Windows服务 net stop Apache2.4 :: 停止服务 httpd -t :: 检查语法 net start Apache2.4 :: 重启 本地测试
打开浏览器,访问 http://localhost:8080/webdav成功!
跨机器访问
跨机器访问需要解除防火墙限制,管理员cmd:
:: 放行 TCP 8080 端口(永久生效) netsh advfirewall firewall add rule name="WebDAV-8080" dir=in action=allow protocol=TCP localport=8080 remoteip=any profile=any enable=yes :: 删除 netsh advfirewall firewall delete rule name="WebDAV-8080" protocol=TCP localport=8080 测试:从另一台机器上尝试访问http://<ipv4>:8080/webdav成功。
Rclone
下载安装
下载 rclone(https://rclone.org/,全平台),或命令行。
macOS:
# 安装 Homebrew(如未装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装 rclone brew install rclone # 验证 rclone versionWindows(管理员Powershell):
winget install Rclone.RcloneWebDAV配置
# 进入配置向导 rclone config # 按提示: # n → 新建远程 # name(如 webdav) # storage:WebDAV # url(如 http://192.168.1.100/webdav) # vendor: 7 # 用户名、密码 (没有则跳过) # 完成后 q 退出常用命令
# 列出文件 rclone ls webdav:/ # 上传文件 copy A to B rclone copy local_file.txt webdav:/path/