原生http_dav_module不支持PROPFIND、OPTIONS、LOCK等关键方法,无法被Windows/macOS/iOS客户端识别为合法WebDAV服务,必须补装nginx-dav-ext-module并验证其存在(nginx -V | grep dav_ext),且Nginx版本需锁定在1.22.x或1.24.x;同时必须配置autoindex_format xml和严格匹配alias末尾斜杠以确保挂载与写入正常。

原生 http_dav_module 不足以让 Nginx 被识别为 WebDAV 服务,Windows/macOS/iOS 客户端挂载失败或只读,根本原因是缺 PROPFIND、OPTIONS、LOCK 等方法——必须补装 nginx-dav-ext-module,且不能用 Nginx 1.25.0+。
确认 nginx-dav-ext-module 是否已编译进 Nginx
很多人只查 with-http_dav_module 就以为 OK,但这是误导。真正要验证的是扩展模块:
-
nginx -V 2>&1 | grep -o dav_ext—— 有输出才表示nginx-dav-ext-module已加载 - 若无输出,哪怕配置全对,客户端也会返回“找不到网络路径”或列表为空
- Nginx 1.25.0+ 已移除对该模块的兼容支持,建议锁定在 1.22.x 或 1.24.x 版本重新编译
location 中 root 和 alias 的选择必须严格匹配 URL 结尾
错配会导致 404、写入到错误目录,甚至权限越界:
- URL 是
/webdav/(结尾带斜杠)→ 必须用alias /data/webdav/;,注意末尾斜杠对齐 - URL 是
/webdav(无斜杠)→ 才可用root /data/;,此时/webdav/file.txt映射到/data/webdav/file.txt - 典型错误:
location /webdav/ { root /data/webdav; ... }→ 实际写入路径变成/data/webdav/webdav/...
autoindex_format xml 是强制要求,不是可选项
所有主流 WebDAV 客户端(Windows 映射驱动器、macOS Finder、iOS 文件 App)都依赖 XML 格式目录列表解析结构:
- 必须显式设置
autoindex_format xml; - 设成
html、省略、或用autoindex on;默认格式,都会导致挂载成功但列表为空 - 搭配
dav_ext_methods PROPFIND PROPPATCH;才能响应客户端的元数据请求
权限与路径安全容易被忽略的细节
即使协议和路径都对了,仍可能因权限失控导致写失败或越权访问:
-
dav_access user:rw group:rw all:r;中的all:r表示未认证用户可读,生产环境应禁用或配合auth_basic - 存储目录需由 Nginx worker 进程用户(如
www-data或nginx)拥有写权限:chown -R www-data:www-data /data/webdav -
create_full_path on;必须开启,否则客户端新建嵌套目录(如/a/b/c)会报 409 Conflict - SELinux 启用时需额外放行:
setsebool -P httpd_can_network_connect 1,否则 PUT 请求静默失败
最常被跳过的一步是验证模块存在性——没 dav_ext 输出,后面所有配置都是无效劳动。另外,autoindex_format xml 和 alias 末尾斜杠对齐这两处,几乎每个挂载失败案例里都藏着它们。


















