必须引入nginx-dav-ext-module扩展模块,因原生http_dav_module缺失propfind、options、lock等关键方法,导致windows/macos客户端无法挂载或仅读;需用nginx 1.22.x/1.24.x编译安装,配置dav_methods与dav_ext_methods并启用autoindex_format xml。

要让 Nginx 支持完整的 WebDAV 协议(尤其是 Windows/macOS 客户端挂载、目录浏览、文件属性读取等),不能只依赖原生 ngx_http_dav_module,它缺少 PROPFIND、OPTIONS、LOCK 等关键方法。必须引入增强模块 nginx-dav-ext-module,并正确编译安装。
确认系统环境与依赖
确保基础构建工具和开发库已就绪:
- Ubuntu/Debian:
sudo apt install build-essential libpcre3-dev libssl-dev zlib1g-dev - CentOS/RHEL:
sudo yum install gcc pcre-devel openssl-devel zlib-devel - 关闭 SELinux(如启用):
setenforce 0并修改/etc/selinux/config中为disabled - 建议使用稳定 Nginx 版本(如 1.22.x 或 1.24.x),避免与 dav-ext 模块不兼容(1.25.0+ 已知存在 API 冲突)
编译安装带 dav-ext 的 Nginx
手动编译是目前最可靠的方式(Docker 镜像或包管理器预装版通常不含该模块):
- 下载 Nginx 源码(例如
nginx-1.24.0.tar.gz)和nginx-dav-ext-module(推荐 v3.0.0) - 解压后进入 Nginx 源码目录,执行配置命令(关键参数含
--add-module):
--prefix=/etc/nginx \
--with-http_dav_module \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=../nginx-dav-ext-module-3.0.0
- 执行
make && sudo make install - 验证模块加载:
nginx -V 2>&1 | grep dav_ext—— 输出应含dav_ext
最小可用 WebDAV 配置示例
在 server 块中添加以下 location 配置(路径需真实存在且权限正确):
alias /data/webdav/;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND PROPPATCH OPTIONS LOCK UNLOCK;
autoindex on;
autoindex_format xml;
auth_basic "WebDAV Access";
auth_basic_user_file /etc/nginx/.webdav_users;
create_full_put_path on;
dav_access user:rw group:rw all:r;
default_type application/octet-stream;
}
-
alias路径末尾必须带/;/data/webdav目录需由www-data(Ubuntu)或nginx(CentOS)用户可读写 - 用
htpasswd -c /etc/nginx/.webdav_users username创建认证用户 -
autoindex_format xml是客户端识别目录结构的关键,缺失会导致挂载失败
客户端验证要点
不同平台对协议支持有差异,注意适配:
- Windows:默认仅信任 HTTPS WebDAV;若用 HTTP,需修改注册表
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParametersBasicAuthLevel = 2 - macOS Finder:直接“连接服务器”,地址填
http://ip:port/webdav/,输入账号密码即可挂载 - Linux 客户端:
sudo apt install davfs2后,sudo mount -t davfs http://ip:port/webdav/ /mnt/dav - 第三方工具(如 RaiDrive、Cyberduck)更友好,无需改系统设置,推荐测试初期使用











