通过Nginx创建WebDAV服务同步Zotero文献

Zotero 提供了免费的 300MB 同步空间,文献多了之后存不下了。好在 Zotero 还支持通过 WebDAV 的方式同步文件,这篇文章分享一下具体的部署过程。

设备选择

首先,需要一台装有 Linux 系统的电脑,云主机或者 NAS 都可以。我部署 WebDAV 的设备是一台旧办公本,装上了 Ubuntu 系统放在宿舍里 7x24h 运行着,算是一台服务器了。因为我需要同步文献的设备总是连接着校园网,所以也不需要公网 IP。

如果读者的设备不能总在同一个局域网,那么你只能考虑有公网 IP 的 NAS 或者云主机了。

安装 Nginx

通过包管理器 apt 安装 nginx:

1
2
sudo apt-get update
sudo apt-get install nginx-full

安装好之后可以通过 curl 检测下 nginx 是不是装好了。

1
curl http://localhost

如果显示下面的内容,能找到“Welcome to 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
> curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

也有可能提示找不到 curl,那么可以用包管理器装一下 curl 然后再试一次。执行: sudo apt-get install curl 安装 curl。

配置 WebDAV

接下来,需要使用编辑器 nano 在 Nginx 的配置文件目录中创建一个配置文件,配置 WebDAV 服务的相关设置。

1
sudo nano /etc/nginx/conf.d/webdav.conf

如果你的 Linux 系统有 GUI 界面,可以用 VSCode 等可视化编辑器操作

往里面填入以下配置文件内容,可以根据情况修改端口(比如 17780 可以改成别的端口)、路径等参数:

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
server {
listen 17780;
listen [::]:17780;

location / {
root /var/www/dav/webdav_root;

# dav allowed method
dav_methods PUT DELETE MKCOL COPY MOVE;
# Allow current scope perform specified DAV method
dav_ext_methods PROPFIND OPTIONS;

dav_access user:rw group:rw all:r;

# Temporary folder
client_body_temp_path /var/www/dav/tmp;

# MAX size of uploaded file, 0 mean unlimited
client_max_body_size 0;

# Allow autocreate folder here if necessary
create_full_put_path on;

auth_basic “Restricted”;
auth_basic_user_file /var/www/dav/.htpasswd;
}
}

按下快捷键 Ctrl+O 保存退出。

执行以下指令,让 Nginx 重新载入所有配置文件。如果没有任何输出,说明配置文件的内容正确。

1
sudo nginx -s reload

现在,需要创建一些目录。这里的 -p 参数的作用是递归地创建目录,能够同时创建一条路径里所有不存在的目录。

1
2
sudo mkdir -p /var/www/dav/tmp
sudo mkdir -p /var/www/dav/webdav_root

然后,需要改变这些目录的拥有者为 www-data。

1
2
sudo chown -R www-data /var/www/dav/tmp
sudo chown -R www-data /var/www/dav/webdav_root

创建认证用户

这里要用到 Apache Utils,通过包管理器安装:

1
sudo apt-get install apache2-utils

执行下面的指令,他会创建一个 .htpasswd 文件。其中 exampleuser 是用户名,将它改成你自己的英文名字。回车执行之后,会提示你输入两次密码,这是认证用的密码。

1
sudo htpasswd -c /var/www/dav/.htpasswd exampleuser

如果一切顺利,执行下面的指令,可以看到一对用冒号分隔的用户名和密码哈希。

1
sudo cat /var/www/dav/.htpasswd

内容结构类似于:

1
login:password

在 Zotero 中测试

最后在 Zotero 里同步方式选择 WebDAV 就好了。

如果 Zotero 的同步没有反应(表现在没有新文件出现在 /var/www/dav/webdav_root 里),需要关闭 Zotero 的自动同步,然后手动点击同步按钮同步一次,这样可以强制 Zotero 进行一次完全同步。同步完成后再把自动同步开回来。

错误排查

上面 WebDAV 服务所涉及的目录都需要有执行权限,你可以通过 chmod 指令给相关目录赋予执行权限。

比如我的相关目录都改到了 /home/ubuntu 中:

1
2
3
sudo chmod +x /home/ubuntu/dav
sudo chmod +x /home/ubuntu/dav/tmp
sudo chmod +x /home/ubuntu/dav/webdav_root

如果还有其他错误,可以通过查看 Nginx 的错误日志进一步排查。

1
sudo cat /var/log/nginx/error.log
作者

uint128.com

发布于

2023-11-16

更新于

2023-11-16

许可协议

评论