Nginx 本身不原生支持完整 WebDAV 协议,仅通过 ngx_http_dav_module 提供有限方法(如 PUT/DELETE),无法满足操作系统挂载所需的 PROPFIND、LOCK 等完整功能;实际方案是用 Nginx 反向代理后端专用 WebDAV 服务(如 AList、Apache mod_dav),并配置 server 块透传所有 WebDAV 方法、禁用缓冲、强制 HTTPS、保留关键请求头,确保协议兼容与安全。

WebDAV 不是 Nginx 原生支持的协议,它本身不依赖 server 块直接实现——Nginx 默认不提供 WebDAV 服务功能,而是通过 ngx_http_dav_module 模块提供有限的 WebDAV 方法支持(如 PUT、DELETE、MKCOL、PROPFIND 等),但该模块仅支持文件系统级写入,不支持用户认证、锁机制、属性管理等完整 WebDAV 功能,因此不能直接用于私有云存储挂载场景(如 RaiDrive、macOS Finder、Windows 映射网络驱动器)。
真正能被操作系统或客户端稳定挂载的 WebDAV 服务,需由专用 WebDAV 服务器(如 bytemark/webdav、ownCloud/Nextcloud、AList、Apache httpd + mod_dav)提供。Nginx 在其中通常只作为反向代理,负责 HTTPS 终结、路径转发、基础鉴权或负载均衡。
所以,“配置 server 块支持 WebDAV 挂载”实际是指:用 Nginx 反向代理后端真正的 WebDAV 服务,并确保协议兼容性与安全性。
以下是关键配置要点:
后端 WebDAV 服务必须先就绪
例如:
- 使用 AList(推荐,轻量、支持多存储、自带 WebDAV 接口):默认 WebDAV 地址为
http://127.0.0.1:5244/dav - 或 Docker 运行
bytemark/webdav:暴露端口如8080,挂载本地目录/data - 或 Apache 启用
mod_dav+mod_dav_fs
Nginx 不替代它们,只代理它们。
Nginx server 块需正确透传 WebDAV 请求
WebDAV 客户端(如 Windows、RaiDrive)会发送 PROPFIND、PROPPATCH、LOCK、UNLOCK、MOVE、COPY 等方法,Nginx 默认会拒绝非标准方法(如 PROPFIND),需显式放行:
server {
listen 443 ssl http2;
server_name webdav.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.key;
# 必须允许 WebDAV 所有核心方法
limit_except GET HEAD POST PUT DELETE MKCOL COPY MOVE LOCK UNLOCK PROPFIND PROPPATCH OPTIONS {
deny all;
}
# 关键:禁用缓冲,避免流式传输中断(尤其大文件上传/下载)
proxy_buffering off;
proxy_request_buffering off;
client_max_body_size 10G;
# 正确透传原始 Host、Authorization 和 WebDAV 头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization $http_authorization;
proxy_pass_request_headers on;
# 后端 WebDAV 服务地址(以 AList 为例)
location /dav {
proxy_pass http://127.0.0.1:5244/dav;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
必须启用 HTTPS 并正确处理证书
绝大多数客户端(尤其是 Windows 和 macOS)拒绝挂载 HTTP WebDAV,强制要求 TLS。
- 使用 Let’s Encrypt 或商业证书
- 确保
ssl_certificate和ssl_certificate_key路径正确且权限合理(如644) - 若用自签名证书,客户端需手动信任,不建议生产环境使用
避免常见陷阱
- ❌ 不要尝试用
dav_methods all;(Nginx 不支持该指令) - ❌ 不要在
location /dav中启用autoindex on—— 会干扰 WebDAV 的PROPFIND响应 - ❌ 不要开启
gzip on对 WebDAV 路径 —— 可能破坏 XML 响应格式(PROPFIND返回的是 WebDAV XML) - ✅ 建议添加
add_header X-WebDAV-Enabled "true";方便调试识别
客户端验证方式
挂载成功后,可用 curl 测试基础能力:
# 查看根目录结构(应返回 207 Multi-Status) curl -X PROPFIND -u "user:pass" -H "Content-Type: application/xml" --data '<?xml version="1.0"?><propfind xmlns:a="DAV:"><prop><displayname></displayname></prop></propfind>' https://webdav.example.com/dav/ # 上传测试文件 curl -X PUT -u "user:pass" --data "hello webdav" https://webdav.example.com/dav/test.txt
本质上,Nginx 的 server 块只是 WebDAV 的“门面”,真正的存储逻辑、用户管理、权限控制、版本与锁均由后端服务承担。配置重点在于安全透传、方法放行、头部保留和 TLS 终结。











