一、模块概述
ngx_http_dav_module
是 NGINX 官方提供的 WebDAV 支持模块,能够处理以下方法:
- PUT:上传或覆盖文件
- DELETE:删除文件或空目录
- MKCOL:创建目录
- COPY:在同一站点内复制文件或目录
- MOVE:在同一站点内移动(重命名)文件或目录
注意:只支持上述基本 WebDAV 方法,若客户端依赖更高级的 WebDAV 扩展方法(如
PROPFIND
、LOCK
),本模块无法满足。
二、示例配置
location /dav/ {
# 本地存储根目录
root /data/www;
# 上传临时文件目录
client_body_temp_path /data/client_temp;
# 启用 WebDAV 方法
dav_methods PUT DELETE MKCOL COPY MOVE;
# 自动创建 PUT 路径中的中间目录
create_full_put_path on;
# 设置新建文件/目录的权限:所属用户可读写,组可读写,其他用户只读
dav_access group:rw all:r;
# 限制除 GET 以外请求只能来自 192.168.1.0/32
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
}
三、核心指令详解
1. dav_methods
dav_methods off | method ...;
-
作用:开启或关闭模块对指定方法的支持。
-
支持方法:
PUT
、DELETE
、MKCOL
、COPY
、MOVE
。 -
示例:
dav_methods PUT DELETE MKCOL COPY MOVE;
-
性能提示:对于
PUT
上传,NGINX 会先写入临时文件,再重命名到目标位置。若临时目录和目标目录不在同一文件系统,会发生跨设备复制,建议两者同盘。
2. create_full_put_path
create_full_put_path on | off;
-
默认:
off
-
作用:是否为
PUT
请求自动创建目标路径中缺失的中间目录。 -
示例:
create_full_put_path on;
-
应用:当你需要通过
PUT /dav/a/b/c/file.txt
上传文件,而目录/dav/a/b/c/
可能不存在时,开启此项可让 NGINX 在上传前自动mkdir -p
。
3. dav_access
dav_access users:permissions ...;
-
默认:
user:rw
(仅指定用户可读写) -
作用:设置新创建文件和目录的默认文件权限。
-
格式:
user:rw
— 文件所属用户可读写group:r
— 所属用户组只读all:r
— 其他用户只读
-
示例:
dav_access user:rw group:rw all:r;
-
说明:如果只指定
group
或all
,可省略user
,例如dav_access group:rw all:r;
。
4. min_delete_depth
min_delete_depth number;
-
默认:
0
(允许删除任意深度) -
作用:控制
DELETE
方法允许删除的最小路径深度(以/
分段计数)。 -
示例:
min_delete_depth 4;
- 允许删除
/a/b/c/d.txt
(深度 4)及更深的资源 - 拒绝删除
/a/b
、/a/b/c
(深度小于 4)
- 允许删除
四、落地实践建议
-
权限与安全
- 尽量配合
limit_except
、allow/deny
、auth_basic
等进行访问控制; - 确保
client_body_temp_path
与root
在同一文件系统,避免跨盘复制的性能损耗。
- 尽量配合
-
日志与监控
- 配置
access_log
和error_log
,观察 WebDAV 操作的失败与成功; - 对
MOVE/COPY
增加应用层审计(如自定义 Header)以便追踪。
- 配置
-
临时文件清理
- 定期清理
/data/client_temp
中的残留文件; - 可结合
tmpreaper
、systemd-tmpfiles
自动清理超时临时文件。
- 定期清理
-
客户端兼容
- 主流 WebDAV 客户端(例如 macOS Finder、Windows 文件资源管理器、Cyberduck、cadaver)支持基本方法,但不支持高级扩展;
- 若需
PROPFIND
、LOCK
等高级特性,建议使用专门的 WebDAV 服务器(如 Apache mod_dav)。
五、总结
ngx_http_dav_module
是 NGINX 提供的简洁高效的 WebDAV 支持方案,能够让你的 NGINX 服务器具备基础的文件上传、删除、目录管理、复制与移动能力。通过合理配置权限、路径自动创建和删除深度限制,可以在运维自动化、CI/CD 构建产物发布、内部文件分享等场景中,轻松实现“免 FTP、免 SFTP,直接用 HTTP 管理文件”。掌握这个模块,能让你把 NGINX 的静态服务能力更进一步。