nginx代理webdav的关键是作为统一入口透传请求,而非自行处理文件:需禁用dav_methods,改用proxy_pass转发,并显式透传propfind、put等方法及depth、if等关键请求头,确保路径拼接正确、认证与限流可控。

直接用 Nginx 做 WebDAV 代理,关键不是让它处理文件,而是让它把所有 WebDAV 请求原样、完整地转给后端服务(比如 Nextcloud、MinIO 或 NAS 的 WebDAV 接口),同时不丢方法、不丢头、不错路径。
放行 WebDAV 所需的 HTTP 方法
Nginx 默认只认 GET、POST、HEAD 等常见方法,PROPFIND、PROPPATCH、LOCK、UNLOCK、MOVE、COPY 这些 WebDAV 特有方法会被直接拒绝。必须显式允许:
- 在
location块里加limit_except或直接配置proxy_method $request_method; - 确保
proxy_pass_request_headers on;开启,否则请求头全被过滤 - 不要启用
dav_methods指令——那是让 Nginx 自己实现 WebDAV,和反向代理冲突
透传关键请求头信息
WebDAV 协议依赖特定请求头完成元数据查询、锁机制、条件写入等操作。漏掉任意一个,客户端挂载就会失败或功能异常:
-
proxy_set_header Depth $http_depth;—— PROPFIND 必需,决定遍历深度 -
proxy_set_header Overwrite $http_overwrite;—— 控制 PUT 是否覆盖已有文件 -
proxy_set_header If $http_if;—— 实现条件请求(如带锁写入) -
proxy_set_header Timeout $http_timeout;(可选)—— 配合 LOCK 操作超时控制
路径与转发细节不能出错
路径拼接错误会导致 404 或返回空目录,尤其在多级路径或带前缀代理时:
-
proxy_pass https://backend.example.com/webdav/;末尾斜杠必须有,否则 Nginx 会把 location 路径也拼进去 - 如果前端访问的是
/mydav/,而后端实际是/webdav/,可用rewrite ^/mydav/(.*)$ /webdav/$1 break;做路径映射 - 避免使用
root+alias混搭,反向代理场景下只用proxy_pass
认证与安全控制建议
代理层是统一鉴权入口,比后端各自配更可控:
- 用
auth_basic+auth_basic_user_file做基础认证(适合小团队) - 更推荐结合 JWT 或 OAuth2 透传,由后端验证,Nginx 只做 token 校验与 header 注入
- 加
client_max_body_size限制上传大小,防止大文件耗尽内存 - 开启
proxy_buffering off;避免流式上传(如大文件 PUT)被缓存截断











