Nginx原生不支持完整WebDAV,宝塔默认未编译--with-http_dav_module模块,需卸载后选择“编译安装”并添加该模块及nginx-dav-ext-module扩展,否则配置无效;必须同时配置dav_methods和dav_ext_methods(如PROPFIND、LOCK等),并确保目录权限、认证文件路径及Nginx重启全部正确。

Nginx 原生不带完整 WebDAV 支持,宝塔默认安装的 nginx 编译时没加 --with-http_dav_module,直接改配置会 501 Not Implemented 或 405 Method Not Allowed —— 这是绝大多数人卡住的第一步。
确认 nginx 是否真支持 dav_methods
别信面板里“已安装 Nginx”就万事大吉。执行命令验证实际模块状态:
nginx -V 2>&1 | grep -o with-http_dav_module
无输出?说明模块根本没编译进去。此时改配置文件里写再多 dav_methods PUT DELETE 都无效。
- 宝塔「软件商店」里卸载当前 Nginx(不是停用)
- 重装时选「编译安装」,不是“极速安装”
- 在「自定义模块」中填入:
--with-http_dav_module --add-module=/root/nginx-dav-ext-module - 前置脚本必须先拉取扩展模块:
git clone https://github.com/arut/nginx-dav-ext-module.git /root/nginx-dav-ext-module
编译耗时 10–30 分钟,期间别关 SSH。完成后再次运行 nginx -V 确认输出含 with-http_dav_module 和 nginx-dav-ext-module。
location 块里漏掉 dav_ext_methods 就连 PROPFIND 都失败
Zotero、AirExplorer、Windows 资源管理器这些客户端一上来就会发 PROPFIND 请求查目录结构。标准 ngx_http_dav_module 只支持 PUT/DELETE/MKCOL,PROPFIND、LOCK、OPTIONS 必须靠 nginx-dav-ext-module 补全。
- 配置里必须显式启用:
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; -
dav_methods和dav_ext_methods是并列关系,不能只写一个 - 如果只配了
dav_methods,客户端会卡在“正在连接”或报错405 Not Allowed
典型可用段落:
location / {
root /www/wwwroot/webdav.example.com;
client_max_body_size 102400M;
autoindex on;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
create_full_put_path on;
dav_access user:rw group:r all:r;
}权限和路径不匹配导致 403 或上传后文件不可见
WebDAV 不是 FTP,它依赖 Nginx worker 进程以特定用户身份读写磁盘。宝塔默认用 www 用户跑 Nginx,但你手动建的目录很可能属主是 root。
- 网站根目录(如
/www/wwwroot/webdav.example.com)必须chown -R www:www - 临时上传缓冲区路径(
client_body_temp_path)也要确保www可写,例如设为/tmp/nginx_webdav并执行chown www:www /tmp/nginx_webdav - 避免把 WebDAV 目录设在
/root或/home下 —— SELinux 或权限策略常拦截 - 若用子路径(如
/webdav)而非根路径,root指令要对应到子目录上级,再配合alias,否则 404
BasicAuth 密码文件位置和语法错一个字符就 401 循环
Nginx 本身不处理用户认证,得靠 auth_basic + auth_basic_user_file 联动 Apache 的 .htpasswd 格式。但宝塔没提供图形化生成入口,手动生成极易出错。
- 密码文件路径必须是绝对路径,且 Nginx 配置里写的路径要和
htpasswd实际生成位置完全一致(包括末尾斜杠) - 生成命令必须带
-c创建首个用户:htpasswd -c /www/wwwroot/webdav.example.com/.htpasswd username - 后续加用户去掉
-c,否则覆盖整个文件 - 密码文件权限设为
644,属主www:www,否则 Nginx 读不到
配置片段示例:
location / {
auth_basic "WebDAV Login";
auth_basic_user_file /www/wwwroot/webdav.example.com/.htpasswd;
# ... 其他 dav 指令
}最易被忽略的是:Nginx 编译安装后,宝塔不会自动重启 Nginx,必须手动点「重启」或执行 bt restart;还有就是客户端缓存了旧的 401 认证头,换浏览器或清空凭据再试才准。这些细节不处理,前面所有配置都白搭。


















