mod_dav_fs性能取决于磁盘i/o、权限及apache同步逻辑;需按序加载mod_dav和mod_dav_fs;dav必须置于中;basic认证配合限制非读操作;真实目录权限与selinux/apparmor配置是可用前提。

Apache 的 mod_dav_fs 本身不提供“高性能”——它只是把文件系统操作映射到 WebDAV 协议,性能瓶颈几乎全在磁盘 I/O、权限检查和 Apache 自身的同步处理逻辑上。真正影响吞吐和并发的是配置方式、认证粒度、目录权限和客户端行为。
确认 mod_dav 和 mod_dav_fs 已正确加载且顺序无误
这两个模块必须同时启用,且 mod_dav 必须在 mod_dav_fs 之前加载,否则 DAV On 会报错 Invalid command 'DAV'。
- Ubuntu/Debian 系统执行:
sudo a2enmod dav dav_fs(a2enmod自动保证顺序) - RHEL/CentOS 系统需手动编辑
/etc/httpd/conf.modules.d/00-dav.conf或主配置,确保两行顺序为:LoadModule dav_module modules/mod_dav.so<br>LoadModule dav_fs_module modules/mod_dav_fs.so
- 验证是否生效:
apache2ctl -M | grep dav(或httpd -M | grep dav),应同时看到dav和dav_fs
DAV On 放在 <directory></directory> 还是 <location></location>?
绝大多数场景下必须用 <directory></directory>,否则会出现 405 Method Not Allowed(尤其对 PUT/PROPPATCH)或文件写入失败。因为 mod_dav_fs 依赖真实文件系统路径,而 <location></location> 是 URL 路径抽象,无法安全映射到磁盘。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- ✅ 正确示例:
<directory><br> DAV On<br> Options Indexes<br></directory>
- ❌ 错误示例:
<location><br> DAV On # 可能导致 PUT 失败或权限绕过<br></location>
- 如果用了
Alias /webdav "/var/www/webdav",则<directory></directory>必须指向真实路径/var/www/webdav,而非 URL 路径/webdav
Basic 认证 + <limitexcept get head options></limitexcept> 是关键性能守门员
不做限制时,任何未授权用户都能发起 PROPFIND 扫描,大量并发列目录请求会迅速拖垮 Apache 进程(尤其是小文件多的目录)。加 <limitexcept></limitexcept> 后,只对读操作放行匿名访问,其余全部 require 认证,大幅降低非必要开销。
- 典型配置片段:
AuthType Basic<br>AuthName "WebDAV"<br>AuthUserFile /etc/apache2/.htpasswd<br><limitexcept get head options><br> Require valid-user<br></limitexcept>
- 注意:
OPTIONS必须放行,否则现代客户端(如 macOS Finder、rclone)会因预检失败而拒绝连接 - 避免用
Require user xxx(硬绑定单用户),应统一用Require valid-user配合.htpasswd管理多用户
真实目录权限和 SELinux/AppArmor 是最常被忽略的故障源
即使配置全对,www-data(或 apache 用户)没权限写入目录,或 SELinux 拦截了 httpd_can_network_connect 和 httpd_read_user_content,PUT 和 DELETE 就永远返回 500 或 403。
- Linux 权限检查三步:
– 目录属主是否为 Apache 运行用户(ls -ld /var/www/webdav)
– 目录是否可写(sudo -u www-data touch /var/www/webdav/test)
– 父路径是否可执行(chmod +x /var/www) - SELinux 用户(RHEL/CentOS/Fedora):
sudo setsebool -P httpd_can_network_connect onsudo setsebool -P httpd_read_user_content on
并确认目录上下文:sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/webdav(/.*)?"→sudo restorecon -Rv /var/www/webdav - AppArmor(Ubuntu)需检查
/etc/apparmor.d/usr.sbin.apache2是否允许写入对应路径
真正决定 WebDAV 是否“可用”的,从来不是模块有没有启,而是 www-data 能不能 openat(2) 和 write(2) 那个目录——所有其他配置都建立在这个基础上。别跳过权限验证这一步。










