NGINX `ngx_http_dav_module` 轻松实现基于 WebDAV 的文件管理

一、模块概述

ngx_http_dav_module 是 NGINX 官方提供的 WebDAV 支持模块,能够处理以下方法:

  • PUT:上传或覆盖文件
  • DELETE:删除文件或空目录
  • MKCOL:创建目录
  • COPY:在同一站点内复制文件或目录
  • MOVE:在同一站点内移动(重命名)文件或目录

注意:只支持上述基本 WebDAV 方法,若客户端依赖更高级的 WebDAV 扩展方法(如 PROPFINDLOCK),本模块无法满足。

二、示例配置

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 ...;
  • 作用:开启或关闭模块对指定方法的支持。

  • 支持方法PUTDELETEMKCOLCOPYMOVE

  • 示例

    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;
    
  • 说明:如果只指定 groupall,可省略 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)

四、落地实践建议

  1. 权限与安全

    • 尽量配合 limit_exceptallow/denyauth_basic 等进行访问控制;
    • 确保 client_body_temp_pathroot 在同一文件系统,避免跨盘复制的性能损耗。
  2. 日志与监控

    • 配置 access_logerror_log,观察 WebDAV 操作的失败与成功;
    • MOVE/COPY 增加应用层审计(如自定义 Header)以便追踪。
  3. 临时文件清理

    • 定期清理 /data/client_temp 中的残留文件;
    • 可结合 tmpreapersystemd-tmpfiles 自动清理超时临时文件。
  4. 客户端兼容

    • 主流 WebDAV 客户端(例如 macOS Finder、Windows 文件资源管理器、Cyberduck、cadaver)支持基本方法,但不支持高级扩展;
    • 若需 PROPFINDLOCK 等高级特性,建议使用专门的 WebDAV 服务器(如 Apache mod_dav)。

五、总结

ngx_http_dav_module 是 NGINX 提供的简洁高效的 WebDAV 支持方案,能够让你的 NGINX 服务器具备基础的文件上传、删除、目录管理、复制与移动能力。通过合理配置权限、路径自动创建和删除深度限制,可以在运维自动化、CI/CD 构建产物发布、内部文件分享等场景中,轻松实现“免 FTP、免 SFTP,直接用 HTTP 管理文件”。掌握这个模块,能让你把 NGINX 的静态服务能力更进一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello.Reader

请我喝杯咖啡吧😊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值