在集成流水线时,我曾遇到需要跨平台传输文件的场景(服务器需要与其他平台进行文件交互)。虽然 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

