一、前言

最近发现了一款比较好的文档管理神器 joplin ,它适用于 Linux、Windows、macOS、Android 和 iOS 平台。支持端到端加密、支持 Markdown 以及通过 NextCloud、Dropbox、OneDrive 或 WebDAV 等第三方服务进行同步。刚好符合个人对多平台支持、免费、安全的要求。由于以前用过一款比较好的笔记软件“麦库笔记”,但是数据同步等基于服务商,由于免费等迫于经营压力情况下,停服了,于是找到了这款平替软件。鉴于以前的情况,于是我搭建了自己的WebDAV服务进行笔记同步,这样保证手机端、PC端日志共享,这里我们重点介绍下如何在CentOS下使用Nginx搭建WebDAV服务,其他类Linux系统大同小异。

二、部署WebDAV

2.1 WebDAV模块安装

首先,我们需要安装Nginx和Nginx的WebDAV模块。nginx进行搭建,ngixn下载安装可以参考 《nginx反向代理设置ssl,支持https》《如何对在用的nginx添加新模块》 。由于Nginx 的自有模块对 WebDAV 协议的支持并不完整,可以通过第三方模块 nginx-dav-ext-module 增加文件特性查找和对写文件的加锁与解锁支持。这里我们需要提前下载nginx-dav-ext-module和headers-more-nginx-module。使用下面命令进行安装:

1
./configure --prefix=/opt/nginx  ..... --with-http_dav_module --add-module=/opt/soft/nginx-dav-ext-module-3.0.0  --add-module=/opt/soft/headers-more-nginx-module-0.37

安装过程可能会报错,可能是需要安装一下依赖,请根据实际情况判断:libxml2、libxml2-devel、libxslt-devel、libpcre3-dev zlib1g-dev。

然后执行make后,拷贝nginx执行文件到sbin下进行替换。

2.2 创建WebDAV目录

1
2
mkdir /opt/nginx/dav_file
chown -R nobody:nobody /opt/nginx/dav_file

2.3 创建WebDAV用户

1
2
yum  -y install  apache2-utils
htpasswd -c /opt/nginx/conf/davpasswd wno704

这个命令会提示你输入密码,输入完成后,我们最好设置下文件权限。

1
chmod 644 /opt/nginx/conf/davpasswd

2.4 配置Nginx

在nginx的http下增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     server {
listen 10009;
server_name localhost;
access_log logs/http-dav.access.log main;

location / {
root /opt/nginx/dav_file; # DAV存储目录
dav_methods PUT DELETE MKCOL COPY MOVE; # DAV支持的请求方法
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; # DAV扩展支持的请求方法
autoindex on;
autoindex_localtime on;
create_full_put_path on; # 启用创建目录支持
dav_access user:rw group:rw all:r; # 设置创建的文件及目录的访问权限

auth_basic "Restricted";
auth_basic_user_file /opt/nginx/conf/davpasswd; # DAV用户认证文件
}
}

2.5 登陆验证

重载下nginx配置。

1
/opt/nginx/sbin/nginx  -s  reload

浏览器访问:http://IP:PORT 就会提示需要账户和密码,我们输入上面配置密码后便可进入。