2025年12月

安装步骤

1. 安装 Nginx 和必要的模块

sudo apt update
sudo apt install nginx-extras

注意:必须安装 nginx-extras 而不是普通的 nginx,因为完整的 WebDAV 支持(包括 PROPFIND、PROPPATCH、MKCOL 等方法)只在 extras 版本中提供。

2. 创建 WebDAV 目录

sudo mkdir -p /var/www/webdav
sudo chown www-data:www-data /var/www/webdav
sudo chmod 755 /var/www/webdav

3. 创建认证文件

# 安装 htpasswd 工具
sudo apt install apache2-utils

# 创建用户(假设用户名是 username)
sudo htpasswd -c /etc/nginx/.htpasswd username

输入密码后会创建认证文件。

4. 配置 Nginx

创建 WebDAV 站点配置:

sudo vim /etc/nginx/sites-available/webdav

写入以下配置:

server {
    listen 80;
    server_name your_domain.com;
    
    access_log /var/log/nginx/webdav_access.log;
    error_log /var/log/nginx/webdav_error.log;
    
    location /webdav {
        alias /var/www/webdav;
        
        # 启用基础 WebDAV 方法
        dav_methods PUT DELETE MKCOL COPY MOVE;
        
        # 扩展方法只支持 PROPFIND 和 OPTIONS
        dav_ext_methods PROPFIND OPTIONS;
        
        # 创建目录权限
        dav_access user:rw group:r all:r;
        
        # 自动创建目录
        create_full_put_path on;
        
        # 客户端请求体大小限制
        client_max_body_size 10G;
        client_body_temp_path /tmp;
        
        # 启用认证
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        
        # 禁用自动索引
        autoindex off;
    }
}

5. 启用站点并重启 Nginx

# 创建软链接启用站点
sudo ln -s /etc/nginx/sites-available/webdav /etc/nginx/sites-enabled/

# 测试配置
sudo nginx -t

# 重启 Nginx
sudo systemctl restart nginx

测试连接

Linux/macOS 测试:

# 测试连接
curl -u username:password http://your_domain.com/webdav/

# 上传文件
curl -u username:password -T test.txt http://your_domain.com/webdav/test.txt

Windows 测试:

  1. 打开"此电脑"
  2. 点击"映射网络驱动器"
  3. 输入地址:http://your_domain.com/webdav
  4. 输入用户名和密码

HTTPS 配置(强烈推荐)

使用 Let's Encrypt 免费证书:

# 安装 certbot
sudo apt install certbot python3-certbot-nginx

# 获取证书并自动配置
sudo certbot --nginx -d your_domain.com

然后更新 Nginx 配置,使用 HTTPS。

常见问题处理

1. Windows 客户端无法连接

Windows 默认只支持 HTTPS 的 WebDAV。解决方法:

  • 启用 HTTPS(推荐)
  • 或修改注册表允许 HTTP(不推荐)

2. 上传大文件失败

调整 client_max_body_size 参数。

3. 权限问题

确保 www-data 用户有读写权限:

sudo chown -R www-data:www-data /var/www/webdav