部署Nginx 架设 WebDAV
MeteorCat这里主要讲解的是 WebDAV 服务, 主要核心作用是让客户端(电脑|手机|服务器)
通过网络远程访问/编辑/管理服务器上的文件,和传统的传输功能相比较如下:
| 协议类型 |
全称 |
核心用途 |
适用场景 |
特点(优势/劣势) |
与 AI 部署的适配性 |
| WebDAV |
Web-based Distributed Authoring and Versioning |
基于 HTTP/HTTPS 的通用文件访问 |
跨平台(Windows/Mac/Linux/手机)、公网访问、目录挂载、实时协作 |
优势:无客户端依赖、支持 HTTPS 加密、穿透防火墙、可挂载为本地目录;劣势:传输速度中等、大文件断点续传支持一般 |
✅ 高(跨设备共享模型/知识库、无需重复存储、安全公网访问) |
| SMB |
Server Message Block |
局域网文件共享(Windows 默认) |
家庭/办公局域网、Windows 为主的环境、高速文件传输 |
优势:速度快、支持文件锁/权限控制、大文件传输稳定;劣势:公网访问不安全(需额外加密)、Linux 兼容性一般 |
✅ 中高(局域网内 Windows/Mac 访问服务器模型/数据集) |
| AFP |
Apple Filing Protocol |
苹果设备专用文件共享 |
Mac/iOS 设备局域网共享 |
优势:与苹果生态兼容性极佳;劣势:仅支持苹果设备、已被 SMB3 替代 |
❌ 低(兼容性差,无额外优势) |
| NFS |
Network File System |
Linux/Unix 系统专用文件共享 |
Linux 服务器集群、嵌入式设备(开发板)、低延迟访问 |
优势:轻量、低延迟、适合 Linux 间通信、可挂载为本地目录;劣势:Windows 兼容性差、无原生加密 |
✅ 高(Linux 开发板/服务器间模型共享、低资源占用,适配老旧硬件) |
| FTP |
File Transfer Protocol |
传统文件上传/下载 |
早期服务器文件传输、简单场景(无安全需求) |
优势:部署简单、支持批量传输;劣势:明文传输(账号/数据泄露风险)、无文件锁、穿透防火墙困难 |
❌ 低(安全性差,不适合 AI 模型/隐私数据传输) |
| SFTP |
SSH File Transfer Protocol |
基于 SSH 的安全文件传输 |
跨平台(Windows/Mac/Linux)、公网/局域网文件传输、安全需求高的场景 |
优势:加密传输(SSH 隧道)、安全性高、支持断点续传/权限控制、穿透防火墙(仅需 22 端口);劣势:不支持目录挂载(需专用客户端)、传输速度中等 |
✅ 中高(安全传输模型/数据集、跨设备上传下载,适合零散文件交互) |
按照以上协议需求来比较的选择建议:
| 需求场景 |
推荐协议 |
原因 |
| 跨设备目录挂载(如开发板访问服务器文件目录) |
WebDAV / NFS |
支持将服务器目录挂载为本地目录,部分文件可直接读取,无需手动下载 |
| 安全传输零散文件(脚本、日志、单篇文档) |
SFTP |
配置简单(依赖 SSH)、加密安全、支持断点续传,适合零散文件交互 |
| 局域网内 Windows/Mac 访问服务器文件 |
SMB |
速度快、支持文件锁,Windows/Mac 原生支持,无需额外客户端 |
| 公网访问服务器文件(模型/知识库) |
WebDAV(HTTPS)/ SFTP |
均支持加密传输,WebDAV 可挂载目录,SFTP 适合上传下载,按需选择 |
| Linux 服务器/开发板间低延迟访问 |
NFS |
轻量、低资源占用,比 WebDAV/SFTP 延迟更低,适配老旧硬件 |
实际上如果作为内网家庭管理来说, 更加推荐采用 SMB 服务挂载, 因为大部分设备其实就是常用的 Window PC 和移动端的交互.
但是目前好多在线网盘都对 WebDAV 做不同支持, 连带着很多平台端也默认做了 WebDAV 支持, 因为其天然本身跨平台性和公网易用性导致实用性很广.
需要注意: 暴露公网也说明相比内网部署会迎接更多挑战, 所以对于安全和私密性要求较高就不要搭建, 并且绝对要搭建在 https 服务上
这里基于 debian 系的系统, 首先确认 Nginx 环境或者创建挂载目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 默认安装 nginx 和扩展 sudo apt install nginx nginx-extras
# 确认是否存在 DAV 库, 查看是否输出 ngx_http_dav_ext_module.so ls /usr/share/nginx/modules|grep dav
# 没问题之后就准备划分落地空间并分配权限 # 推荐插入扩展硬盘之后额外分配进去 sudo mkdir -p /data/dav sudo chown -R www-data:www-data /data/dav sudo chmod -R 755 /data/dav
# 创建 nginx 配置文件和用户收取啊年文件 sudo touch /etc/nginx/conf.d/webdav.conf sudo touch /etc/nginx/webdav_users
|
编写关于 /etc/nginx/conf.d/webdav.conf 的配置:
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
| # 如果内外传输可以直接采用 http 节省下 https 的性能开支 server { listen 80; server_name your_domain.com; # 内网用服务器 IP(如 192.168.1.100),公网用域名 return 301 https://$host$request_uri; # 强制跳转 HTTPS(安全优先) }
server { listen 443 ssl; server_name your_domain.com; # 同上 charset utf-8; root /data/dav; # 共享目录路径
# HTTPS 加密配置(公网必须,内网可选) # 注意: https 也是有性能开销的, 所以仅作为内网的时候可以降低需求 ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; # 证书路径 ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 安全协议版本 ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
# WebDAV 核心配置 location / { dav_methods PUT DELETE MKCOL COPY MOVE; # 支持的操作(上传/删除/创建目录等) dav_ext_methods PROPFIND OPTIONS; # 支持目录挂载的核心方法 dav_access user:rw group:rw all:r; # 访问权限
# 身份验证(避免匿名访问,保护文件安全) auth_basic "Nginx Share WebDAV"; # 登录提示语 auth_basic_user_file /etc/nginx/webdav_users; # 用户名密码文件路径
# 优化大文件传输 client_max_body_size 100G; # 允许最大上传文件大小(根据文件大小调整) client_body_buffer_size 128k; # 缓冲区大小(低内存设备可设为 64k) proxy_buffering off; # 关闭代理缓冲,减少内存占用 } }
|
创建用户或者并启动服务:
1 2 3 4 5 6 7
| # 默认安装 nginx 自定携带 htpasswd, 如果没有可以输入 sudo apt install apache2-utils 安装 # 这里将创建 meteorcat 托管给内部 webdav_users 文件 sudo htpasswd -c /etc/nginx/webdav_users meteorcat # 按提示输入密码(建议复杂密码,如包含大小写+数字+符号)
# 重启 NGINX sudo systemctl restart nginx
|
一般挂载需要采用 dav://{服务地址}(基于http) 或者 davs://{服务地址}(基于https),
而 window 一般只需要原生映射 http/https 即可(window会自动协调对应协议).
而如果需要采用服务器挂载, 则需要命令行额外扩展命令:
1 2 3 4 5 6
| # 如果不存在 davfs 命令就需要安装组件 sudo apt install davfs2
# webdav 挂载命令(使用 dav:// 或 davs://) # 后续可以考虑写入 /etc/fstab 之中, 实现开机自动挂载 sudo mount -t davfs davs://192.168.1.100 /mnt/dav
|
另外默认是打开浏览器访问的时候应该登陆是无法看到内容, 实际上需要手动开启 autoindex/fancyindex 才允许被访问文件列表,
这里推荐采用 fancyindex+dav 实现 dav 提交|修改|删除的时候, 方便提交的时候直接浏览器下载:
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
| # 如果内外传输可以直接采用 http 节省下 https 的性能开支 server { listen 80; server_name your_domain.com; # 内网用服务器 IP(如 192.168.1.100),公网用域名 return 301 https://$host$request_uri; # 强制跳转 HTTPS(安全优先) }
server { listen 443 ssl; server_name your_domain.com; # 同上 charset utf-8; root /data/dav; # 共享目录路径
# HTTPS 加密配置(公网必须,内网可选) # 注意: https 也是有性能开销的, 所以仅作为内网的时候可以降低需求 ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; # 证书路径 ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 安全协议版本 ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
# WebDAV 核心配置 location / { dav_methods PUT DELETE MKCOL COPY MOVE; # 支持的操作(上传/删除/创建目录等) dav_ext_methods PROPFIND OPTIONS; # 支持目录挂载的核心方法 dav_access user:rw group:rw all:r; # 访问权限
# 身份验证(避免匿名访问,保护文件安全) auth_basic "Nginx Share WebDAV"; # 登录提示语 auth_basic_user_file /etc/nginx/webdav_users; # 用户名密码文件路径
# 优化大文件传输 client_max_body_size 100G; # 允许最大上传文件大小(根据文件大小调整) client_body_buffer_size 128k; # 缓冲区大小(低内存设备可设为 64k) proxy_buffering off; # 关闭代理缓冲,减少内存占用 # 浏览器目录展示 fancyindex on; # 启用fancyindex fancyindex_exact_size off; # 人性化文件大小 fancyindex_localtime on; # 本地时间 fancyindex_name_length 255; # 显示完整文件名 # 忽略 .log 结尾| .tmp 结尾 | 隐藏文件(以.开头)| test 目录 fancyindex_ignore "\.log$|\.tmp$|^\..+$|^test$"; } # 规则1:禁止访问所有.log/.tmp后缀的文件(任意目录下) location ~* \.(log|tmp)$ { deny all; return 404; # 伪装成资源不存在,比403更安全 }
# 规则2:禁止访问根目录下的.test/.*隐藏目录/文件(任意目录下) location ~* /(\..+|test) { deny all; return 404; } # 个别隐藏文件需要允许访问(如/favicon.ico), 可在禁止规则前添加允许规则 location = /favicon.ico { allow all; auth_basic off; # 关闭该类文件的身份验证 try_files $uri =404; } }
|
这样就能实现 WebDAV 提交文件 + 浏览器浏览下载 的功能.
再次提醒: 输入密码的授权是明文写入在 Authorization: Basic {base64} 的 Header, 一定要小心 HTTP 中间人拦截攻击
这里还有种方式就是搭建某些海外的镜像源站, 比如需要完成以下需求:
匿名的访问者可以直接浏览
登陆者可以直接通过DAV提交文件
比较常用的就是内网有个脚本同步拉取海外资源保存本地, 下载资源目录是 WebDAV 挂载的, 最后就是 nginx 暴露出来:
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
| # 内网镜像站不要用 https, 因为资源本身很庞大不需要这些开销 server { listen 80; server_name your_domain.com; # 同上 charset utf-8; root /data/dav; # 共享目录路径
# WebDAV 核心配置 location / {
# WebDAV 写操作配置 dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; dav_access user:rw group:rw all:r;
# 仅对非 GET/HEAD 方法强制身份验证 limit_except GET HEAD { # 身份验证(仅写操作需要) auth_basic "WebDAV 写操作需要登录"; auth_basic_user_file /etc/nginx/webdav_users; }
# 优化大文件传输 client_max_body_size 100G; # 允许最大上传文件大小(根据文件大小调整) client_body_buffer_size 128k; # 缓冲区大小(低内存设备可设为 64k) proxy_buffering off; # 关闭代理缓冲,减少内存占用 # 浏览器目录展示 fancyindex on; # 启用fancyindex fancyindex_exact_size off; # 人性化文件大小 fancyindex_localtime on; # 本地时间 fancyindex_name_length 255; # 显示完整文件名 # 忽略 .log 结尾| .tmp 结尾 | 隐藏文件(以.开头)| test 目录 fancyindex_ignore "\.log$|\.tmp$|^\..+$|^test$"; } # 规则1:禁止访问所有.log/.tmp后缀的文件(任意目录下) location ~* \.(log|tmp)$ { deny all; return 404; # 伪装成资源不存在,比403更安全 }
# 规则2:禁止访问根目录下的.test/.*隐藏目录/文件(任意目录下) location ~* /(\..+|test) { deny all; return 404; } # 个别隐藏文件需要允许访问(如/favicon.ico), 可在禁止规则前添加允许规则 location = /favicon.ico { allow all; auth_basic off; # 关闭该类文件的身份验证 try_files $uri =404; } }
|
这样就可以通过远程另外服务器挂载 dav 盘负责下载, 另外的 nginx 服务器负责提供匿名用户浏览下载镜像网站的功能.