Featured image of post Nginx 搭建 WebDAV 服务器 🖥️

Nginx 搭建 WebDAV 服务器 🖥️

Nginx 搭建 WebDAV 服务器 🖥️ 📖 目录导航 ✨ WebDAV 简介与优势 🚀

Nginx 搭建 WebDAV 服务器 🖥️


📖 目录导航


✨ WebDAV 简介与优势

WebDAV (Web Distributed Authoring and Versioning) 是一种基于 HTTP 协议的扩展,允许用户远程编辑和管理服务器上的文件,具有以下优势:

  • 🌐 跨平台访问:支持 Windows、macOS、Linux、iOS 和 Android
  • 🔒 安全传输:支持 SSL/TLS 加密,保障数据传输安全
  • 📁 文件管理:支持上传、下载、删除、移动、复制等操作
  • 👥 权限控制:支持用户认证和访问权限管理
  • 高性能:基于 Nginx,提供高效的文件服务性能
  • 🔄 版本控制:支持文件版本管理和冲突解决
  • 💾 大文件支持:无文件大小限制,适合大型文件传输
  • 📊 配额管理:支持磁盘空间配额限制

🚀 一、WebDAV 服务器部署

1️⃣ 安装 Nginx with WebDAV 模块

1
2
3
4
5
6
7
8
# 更新软件包列表并安装 nginx-full(包含 WebDAV 模块)
sudo apt update && sudo apt install nginx-full -y

# 验证安装是否成功
nginx -V | grep dav

# 检查 Nginx 版本和模块
nginx -v

2️⃣ 设置目录权限

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 设置共享目录所有权给 Nginx 用户
sudo chown -R www-data:www-data /mnt

# 设置适当的目录权限
sudo chmod -R 755 /mnt

# 验证权限设置
ls -la /mnt/

# 创建专门的 WebDAV 目录(可选)
sudo mkdir -p /mnt/webdav
sudo chown www-data:www-data /mnt/webdav
sudo chmod 755 /mnt/webdav

3️⃣ 创建用户认证文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 创建 WebDAV 配置目录
sudo mkdir -p /etc/webdav

# 创建用户认证文件(用户名: admin, 密码: 123456)
sudo sh -c 'echo -n "admin:" > /etc/webdav/.credentials.list'
sudo sh -c 'openssl passwd -apr1 123456 >> /etc/webdav/.credentials.list'

# 设置认证文件权限
sudo chmod 600 /etc/webdav/.credentials.list

# 验证认证文件
cat /etc/webdav/.credentials.list

# 添加多个用户(可选)
sudo sh -c 'echo -n "user1:" >> /etc/webdav/.credentials.list'
sudo sh -c 'openssl passwd -apr1 "password1" >> /etc/webdav/.credentials.list'

4️⃣ 创建 Nginx WebDAV 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 创建 WebDAV 配置文件
sudo tee /etc/nginx/conf.d/webdav.conf > /dev/null <<'EOF'
server {
    # 监听 666 端口并启用 SSL
    listen 666 ssl http2;
    listen [::]:666 ssl http2;
    
    # 服务器名称
    server_name webdav.mobufan.eu.org;
    
    # SSL 证书配置
    ssl_certificate /etc/nginx/keyfile/cert.pem;
    ssl_certificate_key /etc/nginx/keyfile/key.pem;
    
    # SSL 协议配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SSHA256:DHE-RSA-AES256-GCM-SHA384;
    
    # 字符编码设置
    charset utf-8;
    
    # 启用目录列表显示
    autoindex on;
    
    # WebDAV 根目录
    root /mnt;
    
    # 认证配置
    auth_basic "WebDAV Authentication";
    auth_basic_user_file /etc/webdav/.credentials.list;
    
    # WebDAV 方法支持
    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_ext_methods PROPFIND OPTIONS;
    
    # 文件权限设置
    dav_access user:rw group:rw all:r;
    
    # 客户端设置
    client_body_temp_path /tmp;
    client_max_body_size 0;
    
    # 允许创建目录
    create_full_put_path on;
    
    # 安全头设置
    add_header X-Content-Type-Options nosniff always;
    add_header X-Frame-Options DENY always;
    add_header X-XSS-Protection "1; mode=block" always;
    
    # 错误页面处理
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
        internal;
    }
    
    # 限制特定文件类型的访问(可选)
    location ~* \.(php|asp|aspx|jsp)$ {
        deny all;
        return 403;
    }
}
EOF

# 设置配置文件权限
sudo chmod 644 /etc/nginx/conf.d/webdav.conf

5️⃣ 重启 Nginx 服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 测试配置文件语法
sudo nginx -t

# 重启 Nginx 服务
sudo systemctl restart nginx

# 查看服务状态
sudo systemctl status nginx

# 启用 Nginx 开机自启
sudo systemctl enable nginx

⚙️ 二、SSL 证书配置

1️⃣ 使用 Let’s Encrypt 获取免费证书

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx -y

# 获取 SSL 证书(需要域名已解析到服务器)
sudo certbot --nginx -d webdav.mobufan.eu.org

# 设置证书自动续期
sudo crontab -l | { cat; echo "0 12 * * * /usr/bin/certbot renew --quiet"; } | sudo crontab -

# 验证证书状态
sudo certbot certificates

2️⃣ 手动配置 SSL 证书

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 创建证书目录
sudo mkdir -p /etc/nginx/keyfile

# 放置证书文件(假设已有证书文件)
sudo cp /path/to/your/cert.pem /etc/nginx/keyfile/cert.pem
sudo cp /path/to/your/key.pem /etc/nginx/keyfile/key.pem

# 设置证书文件权限
sudo chmod 600 /etc/nginx/keyfile/*
sudo chown www-data:www-data /etc/nginx/keyfile/*

# 验证证书文件
sudo openssl x509 -in /etc/nginx/keyfile/cert.pem -text -noout

📱 三、客户端连接指南

1️⃣ Windows 连接

  1. 打开"此电脑"
  2. 右键点击"映射网络驱动器"
  3. 输入地址: https://webdav.mobufan.eu.org:666
  4. 勾选"使用其他凭据连接"
  5. 输入用户名: admin,密码: 123456

命令行方式:

1
net use * https://webdav.mobufan.eu.org:666 /user:admin 123456

2️⃣ macOS 连接

  1. 打开"访达"
  2. 点击"前往" → “连接服务器”
  3. 输入地址: https://webdav.mobufan.eu.org:666
  4. 输入用户名和密码

命令行方式:

1
2
3
4
5
# 安装 WebDAV 客户端
brew install cadaver

# 连接 WebDAV 服务器
cadaver https://webdav.mobufan.eu.org:666

3️⃣ Linux 连接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 安装 davfs2 客户端
sudo apt install davfs2 -y

# 创建挂载点
sudo mkdir /mnt/webdav

# 挂载 WebDAV 共享
sudo mount -t davfs https://webdav.mobufan.eu.org:666 /mnt/webdav

# 输入用户名和密码

# 卸载共享
sudo umount /mnt/webdav

4️⃣ 移动端连接 (ES文件浏览器)

  1. 打开 ES文件浏览器
  2. 点击"服务" → “新建” → “WebDAV”
  3. 配置连接信息:
    • 服务器: webdav.mobufan.eu.org:666
    • 用户名: admin
    • 密码: 123456
    • 勾选"HTTPS"

5️⃣ 使用 curl 测试连接

1
2
3
4
5
6
7
8
# 测试 WebDAV 连接
curl -X PROPFIND https://webdav.mobufan.eu.org:666 -u admin:123456

# 上传文件
curl -T localfile.txt https://webdav.mobufan.eu.org:666/ -u admin:123456

# 下载文件
curl -o localfile.txt https://webdav.mobufan.eu.org:666/remotefile.txt -u admin:123456

🔒 四、安全加固

1️⃣ 防火墙配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 启用 UFW 防火墙
sudo ufw enable

# 开放 SSH 端口
sudo ufw allow 22/tcp

# 开放 WebDAV 端口
sudo ufw allow 666/tcp

# 查看防火墙状态
sudo ufw status verbose

# 限制特定 IP 访问(可选)
sudo ufw allow from 192.168.1.0/24 to any port 666

2️⃣ 限制访问 IP

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 在 Nginx 配置中添加 IP 限制
location / {
    allow 192.168.1.0/24;
    allow 10.10.10.0/24;
    deny all;
    
    # 或者使用 geo 模块
    # if ($remote_addr !~ "^(192\.168\.1|10\.10\.10)") {
    #     return 403;
    # }
}

3️⃣ 增强认证安全

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 使用更复杂的密码
sudo sh -c 'echo -n "admin:" > /etc/webdav/.credentials.list'
sudo sh -c 'openssl passwd -apr1 "StrongPassword123!" >> /etc/webdav/.credentials.list'

# 定期更换密码
# 建议每月更换一次密码

# 使用 fail2ban 防止暴力破解
sudo apt install fail2ban -y

# 创建 WebDAV fail2ban 配置
sudo tee /etc/fail2ban/jail.d/webdav.conf > /dev/null <<'EOF'
[nginx-webdav]
enabled = true
port = http,https,666
filter = nginx-auth
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 3600
findtime = 600
EOF

4️⃣ 其他安全措施

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 隐藏 Nginx 版本信息
server_tokens off;

# 限制请求方法
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|PROPFIND|OPTIONS|MKCOL)$) {
    return 405;
}

# 限制请求大小
client_max_body_size 10G;
client_body_buffer_size 128k;

# 设置安全头
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";

🛠️ 五、维护与管理

1️⃣ Nginx 服务管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 查看 Nginx 状态
sudo systemctl status nginx

# 重启 Nginx
sudo systemctl restart nginx

# 重新加载配置(不中断服务)
sudo systemctl reload nginx

# 查看 Nginx 日志
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

# 检查配置文件语法
sudo nginx -t

2️⃣ 升级 Nginx

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 更新软件包列表
sudo apt update

# 升级 Nginx
sudo apt upgrade nginx-full -y

# 验证版本
nginx -v

# 查看已安装的模块
nginx -V

3️⃣ 监控磁盘使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看磁盘使用情况
df -h /mnt

# 设置磁盘配额(如果需要)
# 安装配额工具
sudo apt install quota -y

# 启用配额
sudo edquota -u www-data

# 监控大文件
find /mnt -type f -size +100M -exec ls -lh {} \;

4️⃣ 日志管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 设置日志轮转
sudo tee /etc/logrotate.d/nginx-webdav > /dev/null <<'EOF'
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
EOF

🐛 六、故障排除

1️⃣ 常见问题解决

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 检查端口是否监听
sudo netstat -tuln | grep :666

# 测试 SSL 证书
openssl s_client -connect webdav.mobufan.eu.org:666 -servername webdav.mobufan.eu.org

# 测试 WebDAV 连接
curl -X PROPFIND https://webdav.mobufan.eu.org:666 -u admin:password

# 检查文件权限
namei -l /mnt/somefile.txt

# 检查 SELinux/AppArmor 状态
sudo sestatus  # SELinux
sudo aa-status # AppArmor

# 临时禁用 SELinux/AppArmor 进行测试
sudo setenforce 0  # SELinux
sudo aa-complain /usr/sbin/nginx  # AppArmor

2️⃣ 日志分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看 Nginx 错误日志
sudo tail -f /var/log/nginx/error.log

# 查看认证日志
sudo grep webdav /var/log/nginx/access.log

# 实时监控连接
sudo ngxtop

# 查找错误和警告
sudo grep -E "(error|warn)" /var/log/nginx/error.log

# 查看最近访问
sudo tail -n 100 /var/log/nginx/access.log | awk '{print $1, $4, $7, $9}'

3️⃣ 性能优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 在 Nginx 配置中添加性能优化
http {
    # 缓冲区和超时设置
    client_body_buffer_size 128k;
    client_max_body_size 0;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    
    # 连接设置
    keepalive_timeout 65;
    keepalive_requests 100;
    
    # 文件传输优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    
    # Gzip 压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
    
    # 缓存设置
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

🌐 七、高级功能

1️⃣ 多用户支持

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建多个用户
sudo sh -c 'echo -n "user1:" >> /etc/webdav/.credentials.list'
sudo sh -c 'openssl passwd -apr1 "password1" >> /etc/webdav/.credentials.list'

sudo sh -c 'echo -n "user2:" >> /etc/webdav/.credentials.list'
sudo sh -c 'openssl passwd -apr1 "password2" >> /etc/webdav/.credentials.list'

# 为用户创建专属目录
sudo mkdir -p /mnt/user1 /mnt/user2
sudo chown www-data:www-data /mnt/user1 /mnt/user2
sudo chmod 755 /mnt/user1 /mnt/user2

2️⃣ 目录权限控制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 对不同目录设置不同权限
location /public {
    dav_access user:rw group:r all:r;
    auth_basic off;
}

location /private {
    dav_access user:rw group: none;
    auth_basic "Private Area";
    auth_basic_user_file /etc/webdav/.credentials.list;
}

# 用户专属目录
location /user1 {
    alias /mnt/user1;
    auth_basic "User1 Area";
    auth_basic_user_file /etc/webdav/.credentials.list;
    
    # 限制只有 user1 可以访问
    if ($remote_user != "user1") {
        return 403;
    }
}

3️⃣ 带宽限制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 限制下载速度
location /large-files {
    limit_rate 1m; # 限制为 1MB/s
}

# 限制上传速度
client_body_timeout 300s;
client_header_timeout 300s;
client_body_in_file_only clean;
client_body_buffer_size 256k;

# 按用户限制带宽
map $remote_user $user_rate {
    default    1m;
    "admin"    10m;
    "user1"    2m;
}

server {
    # ...
    limit_rate $user_rate;
}

4️⃣ 自定义错误页面

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 自定义错误页面
error_page 400 /error/400.html;
error_page 401 /error/401.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/50x.html;

location /error {
    internal;
    alias /usr/share/nginx/html/error;
}

📊 总结

通过本指南,你已经成功部署了一个功能完整的 Nginx WebDAV 服务器:

  1. 环境准备:安装 Nginx with WebDAV 模块
  2. 权限配置:设置适当的文件和目录权限
  3. 用户认证:创建安全的用户认证系统
  4. SSL 加密:配置 HTTPS 加密连接
  5. 客户端连接:支持多种客户端访问
  6. 安全加固:增强服务器安全性
  7. 维护管理:日常维护和故障排除
  8. 高级功能:多用户支持、权限控制和性能优化

现在你可以通过 WebDAV 协议安全地访问和管理远程文件了!🌐📂

💡 提示

  • 定期检查服务器日志和更新软件包,确保系统安全
  • 对于生产环境,建议使用更复杂的密码和定期更换密码的策略
  • 考虑设置自动备份机制,防止数据丢失
  • 监控服务器性能,根据需求调整配置参数
  • 定期进行安全审计和漏洞扫描

📚 扩展阅读

最后更新于 2025-09-28