前言
搭建WebDav的两种最简单方式:
-
Linux:Nginx
-
Winodws:IIS
前两天在给小朋友准备一些学习(视频、音频等)的资料,让她在电视机或者iPad上可以自己看。
就想着用WebDav搭建一个影音库,里面只有这些学习的音视频,也没办法看其他东西,而由于她的资料不是很多,干脆就放在Ubuntu服务器上,24h开机也随时都能访问。
WinNAS因为有8块硬盘,24h开机太费电。
过程
方案一:Nginx
Ubuntu Server搭建WebDav的首选方案肯定是Nginx,轻量。
但是按照网上的方法,最终搭建完成后,浏览器可以正常访问,但是手机平板无法访问,只能最终放弃。
方案二:Jellyfin或者Plex
这类媒体资源库其实还是非常不错的,搭建后也能正常访问,但是我又不是很想固定在一个应用上面,相当于以后又要多维护一个应用,暂时先Pass,还是再回去研究一下Nginx搭建的WebDav为什么手机平板无法访问吧~
方案三:Nginx
回来继续研究Nginx,网上搜资料,继续看看是什么原因。
后来看到手机平板必须要使用dav_ext_methods
模块才能正常访问。
为什么手机/平板客户端特别需要它?
手机和平板上的 WebDAV 客户端 App(如 Solid Explorer, CX File Explorer, Documents by Readdle 等)通常被设计为功能全面的“文件管理器”。它们不仅仅满足于上传下载单个文件,更需要:
浏览和管理整个目录结构:这完全依赖
PROPFIND
来获取文件列表和属性。自动发现服务器能力:通过
OPTIONS
请求来确保服务器兼容。提供良好的用户体验:显示文件图标、大小、修改日期等信息,这些都来自
PROPFIND
的响应。如果没有
dav_ext_methods
指令来启用这些扩展方法,会发生什么?
客户端无法列出目录内容(显示为空)。
客户端可能会报错,提示“服务器不支持 WebDAV”或“连接失败”。
你只能通过已知的完整文件路径进行单个文件的上传(
PUT
)或下载(GET
),完全失去了“网盘”的便利性。
步骤
1.安装dav_ext_methods
模块
dav_ext_methods
模块本身是不包含在Nginx中的,需要额外安装,通过下面命令:
apt install libnginx-mod-http-dav-ext #直接使用apt,网上很多源码编译的太麻烦,而且感觉太过时,不确定行不行
2.添加dav_ext_methods
模块
在/etc/nginx/nginx.conf
前端添加:
load_module modules/ngx_http_dav_ext_module.so;
3.创建webdav密码
sudo openssl passwd -6 <你的密码>
得到以 $6$
开头的密码字符串。
4.创建密码文件
echo "<你的用户名>:<生成的密码字符串>" | sudo tee -a /etc/nginx/webdav.htpasswd
5.配置webdav网站
在 site-enable
目录添加网站配置:
# /etc/nginx/site-enable/wedav.conf
server {
listen 80;
listen [::]:80;
server_name _;
location / {
root /path/to/your/folder;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
dav_access group:rw all:r;
autoindex on;
auth_basic "WebDAV";
auth_basic_user_file /etc/nginx/webdav.htpasswd;
client_max_body_size 0;
create_full_put_path on;
}
}
最后重启Nginx: systemctl restart nginx
最后
亲测没问题。
虽然安装那些支持WebDav的第三方应用也是可以的,但是服务器还是尽量避免臃肿以及后期便于维护才是根本。