0%

利用nginx 搭建webdav服务

什么是webdav

简单来说就像百度云一样,是一种云端硬盘服务。但是它是纯技术型的开源的,任何人都可以在自己的服务器上构建一个webdav,作为一个云硬盘。他的速度拉满,支持用户名密码,支持共享协作等文件存储系统常用属性。

  • chatgpt更详细的解释:

WebDAV(Web Distributed Authoring and Versioning)是一种基于HTTP协议的扩展,它允许用户通过互联网进行文件的远程访问和协作。它提供了一套标准的方法和协议,使得用户可以像操作本地文件系统一样,通过网络对远程服务器上的文件进行读取、写入、编辑和管理。

WebDAV扩展了HTTP协议,添加了一些额外的功能,包括对文件的锁定、版本控制、属性管理等。通过WebDAV,用户可以像在本地计算机上操作文件一样,在远程服务器上创建、删除、移动和复制文件和目录。它提供了一种方便的方式来共享和协作文件,允许多个用户在不同的位置使用各种设备访问和编辑共享文件。

一些常见的用途和功能包括:

  • 远程文件访问和管理:通过WebDAV,用户可以通过互联网远程访问和管理服务器上的文件和目录,就像访问本地文件系统一样。
  • 文件同步和备份:WebDAV可用于实现文件同步和备份,使用户可以方便地将文件从本地计算机上传到远程服务器或将文件从远程服务器下载到本地计算机。
  • 远程协作和共享:多个用户可以同时访问和编辑同一个WebDAV服务器上的文件,从而实现远程协作和共享工作文档的目的。
  • 版本控制和文件锁定:WebDAV支持文件版本控制,允许用户追踪和管理文件的不同版本。它还支持文件的锁定机制,以确保在协作过程中文件不会被意外地覆盖或修改。

WebDAV在许多操作系统和应用程序中得到广泛支持,包括Windows、macOS、Linux以及常见的Web浏览器和办公软件。通过使用WebDAV客户端或直接在支持的应用程序中配置WebDAV连接,用户可以方便地进行远程文件操作和协作。

为什么需要webdav

前提是是个懒人,并喜欢琢磨技术来让自己的生活心安理得地变得便捷。目前我的代码都存储在github,在任何设备上可以轻松同步,网页都存储在火狐,工程都存储在实验室服务器,这些都是“在任何设备上”都能快速轻松访问的。唯独我阅读的文献,都放在个人笔记本上,用zotero来读。zotero自带云存储服务,但是容量肯定有限制,能存储下文献库的目录结构,存不了动辄几十个M的附件pdf。
zotero支持webdav。之前搜过免费的webdav服务,但是没搜到。也考虑过百度云的免费同步文件夹服务,但是有限额且下载速度感人。上次偶然问了chatgpt如何搭建个人webdav服务。没想到他的回答看起来很简单,且基于apache和nignx都能快速搭建!

可行性

腾讯云学生轻量级服务器一年40元,白菜价格。国内云厂商的服务器有个特点就是给的硬盘空间非常大,cpu和内存很少。这个特点其实很适合用来搭建webdav服务。

基于nginx搭建webdav

记录搭建记录,chatgpt指导下的实践。

  1. Ubuntu安装NGINX及WebDAV模块
1
2
sudo apt -y update
sudo apt -y install nginx nginx-extras libnginx-mod-http-dav-ext libnginx-mod-http-auth-pam
  1. 在域名托管商那里为webdav添加一个域名解析记录

我把webdav.jixinlong.top用cname解析到jixinlong.top了,我习惯用[服务名].[根域名]来区分不同子服务。

  1. 配置nginx,增加一个网站
    在我常用的配置文件/etc/nginx/nginx.conf 中,我增加了这样一个https类型的web server:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	server {
listen 443 ssl;
server_name webdav.jixinlong.top; # 填写绑定证书的域名
ssl on;
ssl_certificate /root/cert_cf/CERTIFICATE;
ssl_certificate_key /root/cert_cf/KEY;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 按照这个套件配置
ssl_prefer_server_ciphers on;
# return 500;

# webdav
location / {
alias /var/www/webdav;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
auth_basic "WebDAV";
auth_basic_user_file /etc/nginx/webdav.password;
autoindex on;
}
}

表示把webdav.jixinlong.top/zotero 代理到/var/www/webdav目录(没有需创建并设置好所属用户和目录权限)中去。使用/etc/nginx/webdav.password作为用户名密码校验文件。

  1. 创建用于身份验证的用户名和密码
1
sudo htpasswd -c /etc/nginx/webdav.password username

(将 “username” 替换为您想要使用的用户名)

输入并确认密码。

若未安装htpasswd,需要先安装:

1
sudo apt install apache2-utils
  1. 检查配置,配置无误重启nginx
1
2
nginx -t #若返回is ok is successful:
sudo service nginx restart #重启Nginx以应用更改:

webdav服务器搭建成功可以通过访问webdav.jixinlong.top/zotero,成功时网页会让输入用户名密码,输入后可以看到当前webdav里的所有文件。

webdav示意图

  1. 配置zotero同步服务

同步那里选择webdav,服务器填写:
https:// webdav.jixinlong.top /zotero
测试无误ok

  1. 向webdav上传文件受到的限制
    实际使用中,同步时zotero会向zotero官方服务器上传文献库,同时向webdav上传各个附件。
    有的附件很大,在上传时受到了限制,在zotero的log里能观察到http 413返回。
    修改nginx配置里的上传文件大小限制即可
    修改之前,用zotero同步data和files的时候观察服务器上的webdav目录,无变化;修改之后,再用命令观察,能看到同步的同时wevdav目录中的文件一直增加。
    1
    2
    3
    4
    5
    6
    root@mail:~/blog/source# ls /var/www/webdav/zotero/|wc -l
    232
    root@mail:~/blog/source# ls /var/www/webdav/zotero/|wc -l
    233
    root@mail:~/blog/source# ls /var/www/webdav/zotero/|wc -l
    287