tags: [Caddy, WebDAV] title: 使用 Caddy 搭建 WebDAV 服务器(Windows, Linux 等全平台通用) slug: caddy-webdav
IIS的WebDAV太烂,于是有了本博文。以下步骤使用的环境为Windows Server 2012 R2。
先在官方页面下载Caddy可执行文件,记得下载前选中mholt/caddy-webdav
这一插件。
把这个文件重命名为caddy.exe
后丢到这里:C:\Program Files\Caddy\caddy.exe
这一步使用NSSM也可以,而且更简单,更强大。
根据官方教程,安装为服务:
CMD写法:
sc.exe create caddy start= auto binPath= "\"C:\Program Files\Caddy\caddy.exe\" run"
Powershell写法:
New-Service -Name "caddy" -StartupType Automatic -BinaryPathName '"C:\Program Files\Caddy\caddy.exe" run'
路径不加引号的话会有个漏洞,好孩子不要学。
把以下文件丢到和caddy.exe
同一目录下即可
{
order webdav last
}
:53091 {
# handle_path /files/* {
# file_server browse
# }
# redir /files /files/
handle /webdav/* {
webdav {
root E:/ftp
prefix /webdav
}
}
redir /webdav /webdav/
basicauth /webdav/* {
ftp $2a$14$2YDpvmb4hf8Q0GLx8TJw8eQoa4qvkpaKbYHa0RLv5J4IHzdeVTVkG
}
}
具体来说:
:53091
:绑定到0.0.0.0:53091
handle_path /files/*
:在/files
路径下显示一个Web页面,用于浏览器访问。与WebDAV功能无关,但可以用于快速确认防火墙配置是否正确、Caddy是否正常运行等。handle /webdav/*
:在/webdav
路径下处理WebDAV
服务,根目录为E:/ftp
(如果用中文文件名,记得要用UTF-8
编码保存文件)(此处注意路径分隔符必须用/
而非\
)basicauth /webdav/*
:只允许用户名为ftp
、密码为pwd123
的用户访问。这里的密码已经hash过,可以使用caddy hash-password
生成。不好意思没有,需要的可以使用Caddy 1的类似插件。(相关issue)
rclone
(建议)参考链接:1
下载安装WinFsp,下载rclone,进入rclone.exe
所在目录,随后按参考链接完成配置。
<del>[FUSE](https://zhuanlan.zhihu.com/p/106719192): 遥遥领先!</del>
开机自启动可以用Windows服务(略),也可以直接用上一部分那个开机自启动脚本:
把.bat
文件里的内容进行如下更改(关于参数的详细解释):
chcp 65001
pushd "C:\Program Files\rclone"
rclone mount myftp:/ Z: --vfs-cache-mode full
(这里的 myftp 是 rclone 配置文件中的名称,Z: 是挂载的盘符,--vfs-cache-mode full 是启用缓存)
然后应该就好了。Linux/macOS也可以用类似的方法,在此略去。
首先解除一些限制2:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v FileSizeLimitInBytes /t REG_DWORD /d 0xffffffff /f
net stop webclient
net start webclient
建议:编辑C:\Windows\System32\drivers\etc\hosts
,加入一行ftp.local 192.168.66.66
(根据实际情况更改)以更好同时挂载到同一个IP地址下的不同网络驱动器。如果这样做,下面的192.168.66.66
也要对应改为ftp.local
右键“此电脑”,选择“映射网络驱动器”,文件夹写http://192.168.66.66:53091/webdav
,勾选“使用其他凭据连接”。在弹出的登录提示中用户名输入“ftp”,密码输入“pwd123”。
为什么不建议?这样做无法实现开机自动连接,而且每次都要弹出一次密码输入框(即使你已经选择了“记住凭据”)。
net use
命令(不建议)chcp 65001
:TRY
net use Z: http://192.168.66.66:53091/webdav /Persistent:Yes /USER:ftp pwd123 /Y 2>&1|find "找不到网络名">nul
if %errorlevel%==0 (
timeout 10
goto :TRY
) else (
echo fin.
)
把这货丢进一个bat
文件里,比如C:\Program Files\LoginAtStartup\connect-with-net.bat
DIM objShell
set objShell = wscript.createObject("wscript.shell")
iReturn = objShell.Run("cmd /c "&chr(34)&"C:\Program Files\LoginAtStartup\connect-with-net.bat"&chr(34)&"", 0, FALSE)
把这货丢进一个vbs
文件里,再把它的快捷方式丢进shell:startup
(也就是C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
)下,就可以开机自动连接了。再次感叹一句Windows之屎。
为什么不建议?这货打开文件时传参是http://
开头的链接,没几个软件能用。
RaiDrive专为挂载WebDAV等远程连接设计,提供了简单易用的图形化界面。缺点是资源占用较高,且若不付费,功能严重受限。
系统自带的“访达”就可以,详见官方教程。
使用MT管理器(需要付费)、FolderSync(免费,有广告)均可,此处不展开。