要使 Nginx 的 ngx_http_dav_module 正确支持 WebDAV 的 PUT 和 DELETE,需配置 dav_methods PUT DELETE MKCOL COPY MOVE、alias 末尾带斜杠且目录存在可写、create_full_put_path on、dav_access 严格设权、client_body_temp_path 与 alias 同磁盘、启用 auth_basic 认证及 dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK。

要让 Nginx 的 ngx_http_dav_module 正确支持 WebDAV 的 PUT 和 DELETE 方法,不能只写 dav_methods PUT DELETE 就完事——这仅是基础,还必须配合路径、权限、临时文件、客户端兼容性等关键配置,否则上传失败、删除无响应、Windows 映射报错都很常见。
必须启用 dav_methods 并明确列出核心方法
在 location 块中设置:
-
dav_methods PUT DELETE;是最低要求 - 但实际推荐补全:
dav_methods PUT DELETE MKCOL COPY MOVE;
因为多数客户端(尤其 Windows 资源管理器)在挂载时会试探性发起MKCOL或COPY,缺一不可
路径与权限配置直接影响 PUT/DELETE 是否生效
- 使用
alias指向真实目录时,末尾必须带斜杠(如alias /data/webdav/;),且该目录在系统中必须已存在,Nginx 进程对其有读写权限 - 若需上传时自动创建多级子目录(例如
PUT /webdav/a/b/c.txt),必须开启:create_full_put_path on; - 权限控制用
dav_access,例如:dav_access user:rw group:rw all:r;
避免all:r变成all:rw,否则未认证用户也能删文件
临时文件路径和磁盘一致性是 PUT 成功的关键
-
PUT请求会先写入临时文件,再重命名到目标位置 - 若
client_body_temp_path和alias目录不在同一文件系统(比如不同分区或挂载点),会导致跨设备 rename 失败 - 推荐显式配置同盘临时路径:
client_body_temp_path /data/tmp 1 2;
并确保/data/tmp存在、可写、与/data/webdav/同属一个磁盘
别忘了基础安全与客户端适配
-
DELETE和PUT属于危险操作,务必启用认证:auth_basic "WebDAV"; auth_basic_user_file /etc/nginx/.webdav_users; - Windows 映射驱动器还需要额外 WebDAV 扩展方法,仅靠
dav_methods不够,必须加:dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; - 禁用代理缓冲避免大文件中断:
proxy_buffering off;(若走反向代理)或直接在location中设sendfile off;
不复杂但容易忽略


















