webdav
WebDAV 文件共享服务配置
补充说明
WebDAV 是基于 HTTP/HTTPS 的文件共享协议,允许用户通过标准 HTTP 协议远程读写、管理服务器上的文件。相比 Samba/CIFS 依赖特定端口(445),WebDAV 天然穿透防火墙,支持 HTTPS 加密传输,适合跨公网文件访问。
通用说明
- 推荐使用 HTTPS 加密传输,避免明文泄露
- WebDAV 客户端:Windows 资源管理器可直接映射为网络驱动器
- Linux 可通过
davfs2挂载,macOS 通过 Finder 连接- 移动端:ES 文件浏览器、FE File Explorer、Documents by Readdle 等支持
方案一:Nginx + WebDAV(推荐)
安装 Nginx 及 WebDAV 模块
# Debian / Ubuntu
apt update && apt install nginx nginx-extras -y
# RHEL / CentOS / Fedora
yum install nginx mod_dav -y
创建共享目录
mkdir -p /var/www/webdav
chown -R www-data:www-data /var/www/webdav # Debian/Ubuntu
# chown -R nginx:nginx /var/www/webdav # RHEL/CentOS
配置 Nginx 站点
创建 /etc/nginx/sites-available/webdav.conf(Debian/Ubuntu)或 /etc/nginx/conf.d/webdav.conf(RHEL/CentOS):
server {
listen 80;
server_name webdav.example.com;
# 如需 HTTPS,取消下面注释并配置证书
# listen 443 ssl;
# ssl_certificate /etc/nginx/ssl/webdav.crt;
# ssl_certificate_key /etc/nginx/ssl/webdav.key;
root /var/www/webdav;
client_max_body_size 0; # 不限制上传大小
autoindex on;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:rw all:r;
# 认证(推荐开启)
auth_basic "WebDAV Login";
auth_basic_user_file /etc/nginx/webdav.passwd;
}
设置用户认证
# 安装 htpasswd 工具
apt install apache2-utils -y # Debian/Ubuntu
# yum install httpd-tools -y # RHEL/CentOS
# 创建用户(交互式输入密码)
htpasswd -c /etc/nginx/webdav.passwd username
# 添加更多用户(去掉 -c)
htpasswd /etc/nginx/webdav.passwd username2
启用站点并重启 Nginx
# Debian/Ubuntu
ln -s /etc/nginx/sites-available/webdav.conf /etc/nginx/sites-enabled/
nginx -t && systemctl restart nginx
# RHEL/CentOS
nginx -t && systemctl restart nginx
方案二:Apache + WebDAV
Apache 原生支持 WebDAV,启用相关模块即可:
# Debian / Ubuntu
apt update && apt install apache2 -y
a2enmod dav dav_fs auth_digest
# RHEL / CentOS
yum install httpd -y
配置虚拟主机
<VirtualHost *:80>
ServerName webdav.example.com
DocumentRoot /var/www/webdav
<Directory /var/www/webdav>
Options Indexes MultiViews
AllowOverride None
Dav On
# 认证配置
AuthType Digest
AuthName "WebDAV Realm"
AuthUserFile /etc/apache2/webdav.passwd
Require valid-user
</Directory>
</VirtualHost>
创建密码文件
mkdir -p /var/www/webdav
chown -R www-data:www-data /var/www/webdav
# 使用 htdigest 创建用户(Digest 认证)
htdigest -c /etc/apache2/webdav.passwd "WebDAV Realm" username
重启 Apache
# Debian/Ubuntu
apache2ctl configtest && systemctl restart apache2
# RHEL/CentOS
httpd -t && systemctl restart httpd
客户端连接
Windows 映射网络驱动器
- 打开「此电脑」→ 右键 → 「映射网络驱动器」
- 文件夹输入:
https://webdav.example.com(或http://ip) - 勾选「使用其他凭据连接」,输入用户名和密码
- 完成
如果 Windows 提示"文件夹似乎无效",需在注册表中启用基本认证:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"BasicAuthLevel"=dword:00000002
修改后重启服务:
net stop webclient && net start webclient
Linux 挂载(davfs2)
# 安装 davfs2
apt install davfs2 -y # Debian/Ubuntu
# yum install davfs2 -y # RHEL/CentOS
# 创建挂载点
mkdir -p /mnt/webdav
# 挂载(交互式输入密码)
mount -t davfs https://webdav.example.com /mnt/webdav
# 自动挂载配置(免密码)
echo "https://webdav.example.com /mnt/webdav davfs user,noauto,uid=1000,gid=1000 0 0" >> /etc/fstab
echo "https://webdav.example.com username password" >> /etc/davfs2/secrets
chmod 600 /etc/davfs2/secrets
macOS Finder 连接
打开 Finder → 菜单栏「前往」→ 「连接服务器」(Cmd+K)→ 输入 https://webdav.example.com → 输入用户名密码即可。
第三方客户端
| 平台 | 客户端 |
|---|---|
| Windows | RaiDrive(推荐)、WinSCP |
| Android | CX 文件管理器、ES 文件浏览器 |
| iOS | Documents by Readdle |
| macOS | Commander One、CloudMounter |
安全配置
HTTPS 证书(Let's Encrypt)
apt install certbot python3-certbot-nginx -y
certbot --nginx -d webdav.example.com
限制访问 IP
# 在 Nginx server 块中添加
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
上传文件大小限制
Nginx 默认限制上传大小,已在配置中通过 client_max_body_size 0; 禁用。如需限制:
client_max_body_size 10G; # 限制最大 10GB
常见问题
上传返回 405 Not Allowed
确认 Nginx 编译了 ngx_http_dav_module 和 ngx_http_dav_ext_module:
nginx -V 2>&1 | grep -o ngx_http_dav
Windows 提示"文件夹似乎无效"
未开启 WebClient 基本认证,执行注册表修改并重启服务,见上文。
文件上传不完整
检查 Nginx client_max_body_size 限制,或客户端代理缓存导致。可临时在 Nginx 中添加:
proxy_request_buffering off;
目录列表不显示
确认 autoindex on; 已配置。