nginx 实现 webdav 私有云挂载需启用 http_dav_module 模块,配置 dav_methods 与 dav_ext_methods 补全 propfind、lock 等方法,设置 create_full_put_path、dav_access、真实存储路径、基础认证及强制 https。

确认 WebDAV 模块已启用
执行 nginx -V 2>&1 | grep -o with-http_dav_module,有输出说明模块已编译进内核。若无输出,需重新编译 Nginx 并加入 --with-http_dav_module;如需更好兼容 Windows 客户端(比如解决资源管理器卡顿、图标不显示),建议额外添加第三方模块 nginx-dav-ext-module。
配置 location 块透传全部 WebDAV 方法
不能只写 dav_methods PUT DELETE,必须补全扩展方法:
-
dav_methods:保留
PUT DELETE MKCOL COPY MOVE -
dav_ext_methods:必须加上
PROPFIND OPTIONS LOCK UNLOCK,否则 Windows 映射驱动器会失败或反复弹认证框 - create_full_put_path on:允许客户端上传时自动创建多级子目录
-
dav_access user:rw group:r all:r:按实际用户组精细控制权限,避免用
all:rw引发安全风险
绑定真实存储路径与权限
WebDAV 不是虚拟路径,必须指向可读写的物理目录:
- 创建专用目录,例如
/data/webdav,执行 sudo chown -R www-data:www-data /data/webdav(用户组名依 Nginx 实际运行用户调整) - 在
location /webdav { ... }中设 root /data,这样https://your.domain/webdav就真实映射到/data/webdav - 补充 client_max_body_size 50G 和 client_body_temp_path /tmp/nginx_webdav,防止大文件上传中断或临时文件占满根分区
强制基础认证 + HTTPS
WebDAV 接口一旦暴露,未认证等于公开可写:
- 用 auth_basic "WebDAV Access" 和 auth_basic_user_file /etc/nginx/.webdav_users 启用密码保护
- 生成密码文件:执行 htpasswd -c /etc/nginx/.webdav_users username
- 务必通过 HTTPS 提供服务——HTTP 下的 WebDAV 在现代系统(尤其 Windows 10/11)中默认被禁用,挂载会静默失败










