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 连接
- 打开"此电脑"
- 右键点击"映射网络驱动器"
- 输入地址:
https://webdav.mobufan.eu.org:666
- 勾选"使用其他凭据连接"
- 输入用户名:
admin
,密码: 123456
命令行方式:
1
|
net use * https://webdav.mobufan.eu.org:666 /user:admin 123456
|
2️⃣ macOS 连接
- 打开"访达"
- 点击"前往" → “连接服务器”
- 输入地址:
https://webdav.mobufan.eu.org:666
- 输入用户名和密码
命令行方式:
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文件浏览器)
- 打开 ES文件浏览器
- 点击"服务" → “新建” → “WebDAV”
- 配置连接信息:
- 服务器:
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 服务器:
- ✅ 环境准备:安装 Nginx with WebDAV 模块
- ✅ 权限配置:设置适当的文件和目录权限
- ✅ 用户认证:创建安全的用户认证系统
- ✅ SSL 加密:配置 HTTPS 加密连接
- ✅ 客户端连接:支持多种客户端访问
- ✅ 安全加固:增强服务器安全性
- ✅ 维护管理:日常维护和故障排除
- ✅ 高级功能:多用户支持、权限控制和性能优化
现在你可以通过 WebDAV 协议安全地访问和管理远程文件了!🌐📂
💡 提示:
- 定期检查服务器日志和更新软件包,确保系统安全
- 对于生产环境,建议使用更复杂的密码和定期更换密码的策略
- 考虑设置自动备份机制,防止数据丢失
- 监控服务器性能,根据需求调整配置参数
- 定期进行安全审计和漏洞扫描
📚 扩展阅读: