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
| sudo apt update && sudo apt install nginx-full -y
nginx -V | grep dav
nginx -v
|
2️⃣ 设置目录权限
1 2 3 4 5 6 7 8 9 10 11 12 13
| sudo chown -R www-data:www-data /mnt
sudo chmod -R 755 /mnt
ls -la /mnt/
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
| sudo mkdir -p /etc/webdav
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
| sudo tee /etc/nginx/conf.d/webdav.conf > /dev/null <<'EOF' server { listen 666 ssl http2; listen [::]:666 ssl http2; server_name webdav.mobufan.eu.org; ssl_certificate /etc/nginx/keyfile/cert.pem; ssl_certificate_key /etc/nginx/keyfile/key.pem; 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; root /mnt; auth_basic "WebDAV Authentication"; auth_basic_user_file /etc/webdav/.credentials.list; 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
sudo systemctl restart nginx
sudo systemctl status nginx
sudo systemctl enable nginx
|
⚙️ 二、SSL 证书配置
1️⃣ 使用 Let’s Encrypt 获取免费证书
1 2 3 4 5 6 7 8 9 10 11
| sudo apt install certbot python3-certbot-nginx -y
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
| brew install cadaver
cadaver https://webdav.mobufan.eu.org:666
|
3️⃣ Linux 连接
1 2 3 4 5 6 7 8 9 10 11 12 13
| sudo apt install davfs2 -y
sudo mkdir /mnt/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
| 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
| sudo ufw enable
sudo ufw allow 22/tcp
sudo ufw allow 666/tcp
sudo ufw status verbose
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
| location / { allow 192.168.1.0/24; allow 10.10.10.0/24; deny all; }
|
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'
sudo apt install fail2ban -y
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
| 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
| sudo systemctl status nginx
sudo systemctl restart nginx
sudo systemctl reload 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
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
openssl s_client -connect webdav.mobufan.eu.org:666 -servername webdav.mobufan.eu.org
curl -X PROPFIND https://webdav.mobufan.eu.org:666 -u admin:password
namei -l /mnt/somefile.txt
sudo sestatus sudo aa-status
sudo setenforce 0 sudo aa-complain /usr/sbin/nginx
|
2️⃣ 日志分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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
| 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 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; 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; }
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 协议安全地访问和管理远程文件了!🌐📂
💡 提示:
- 定期检查服务器日志和更新软件包,确保系统安全
- 对于生产环境,建议使用更复杂的密码和定期更换密码的策略
- 考虑设置自动备份机制,防止数据丢失
- 监控服务器性能,根据需求调整配置参数
- 定期进行安全审计和漏洞扫描
📚 扩展阅读: