随机
Enter 搜索 ↑↓ 切换 Esc 清空

webdav

命令

WebDAV 文件共享服务配置

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 映射网络驱动器

  1. 打开「此电脑」→ 右键 → 「映射网络驱动器」
  2. 文件夹输入:https://webdav.example.com(或 http://ip
  3. 勾选「使用其他凭据连接」,输入用户名和密码
  4. 完成

如果 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_modulengx_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; 已配置。


参考链接