跳到主要内容

进阶使用

上篇教程中介绍了如何使用http协议进行Zotero同步,但是这种方式安全性较低,在Zotero的iOS客户端中已经强制要求必须使用https协议进行同步。

本期教程介绍如何搭建https服务器实现Zotero的多设备同步。

注意

本教程以example.com作为示例域名,用户需要自行将所有地方出现的example.com修改为自己的实际域名。

域名购买

为了使用https访问,你需要先申请一个域名,例如example.com。下面列举一些常用的域名服务提供商,用户可自行选择:

一般建议你的云服务器是哪家的,就选择哪家的域名服务。

域名解析

域名购买后,可以在域名控制台中将域名解析到你的云服务器的公网IP上。

例如将alist.example.com解析到你的公网IP上。

下面以腾讯云和阿里云分别进行演示。

打开腾讯云域名控制台,选择自己的域名右侧的"解析"按钮。

添加A类型解析记录,记录值填写公网IP。

域名备案

为了能够正常通过域名访问你的网站或服务,你还需要经过ICP备案公安备案,如实填写你的网站用途、负责人等信息。备案通过后才能正常使用域名。详细步骤可以咨询你的域名服务提供商。

反向代理

反向代理,区别于一般意义上的代理(即作为客户端的代理),反向代理是对服务端的代理。

前面我们已经实现直接通过公网IP的方式访问web服务,例如http://server-ip:5244。为了实现域名访问,还需要配置下反向代理,将对域名的访问请求转发到主机对应端口提供的服务中去。

我们使用Caddy工具来配置反向代理。

Caddy安装

在终端中输入下面命令安装:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

验证安装成功

终端中输入下面命令:

caddy version

出现类似下面提示,表示安装成功。

DNS API密钥获取

要实现https访问,需要有域名证书。Caddy支持自动从Let's EncryptZeroSSL申请、配置和续期免费的域名证书,比较方便。当然如果你已经有了域名证书,也可以在Caddy中直接指定。

Caddy支持多种自动申请证书的方式,如HTTP challengeDNS challenge等, 详见:Automatically HPPS | Caddy

注意

Let's Encrypt的泛域名证书只能通过DNS challenge方式获取。

这里主要介绍使用DNS challenge的方式。

安装带插件版本Caddy

前面安装的Caddy是标准版的,包含全部核心功能。但是Caddy也包含了丰富的插件生态,用来扩展其功能。

例如这里申请腾讯云域名证书就要使用到dns.providers.dnspod插件提供的功能。

可以去Caddy官网上下载包含这个插件的二进制可执行文件。

下载含dnspod插件的Caddy
提示

方便起见,这里也提供了集成了腾讯云和阿里云插件的Caddy版本下载:Caddy_linux_amd64_dnspod_alidns | 百度云

下载完成后,将文件上传到云服务器上, 并替换掉之前安装的标准版Caddy。

终端中依次输入下面命令:

sudo systemctl stop caddy # 停止正在运行的Caddy
sudo mv /path/to/new_caddy /usr/bin/caddy # 将前一个路径替换为你的带插件版Caddy的实际绝对路径
sudo systemctl start caddy # 重新启动Caddy
sudo systemctl status caddy

出现类似下面提示表示启动成功。

获取DNS访问密钥

参考:https://support.dnspod.cn/account/dnspod-token/

登录DNSPod 账号中心控制台,按如下图所示创建DNSPOD Token。

点击确认就会弹窗告知生成的IDToken,记录下这两个值后面会用到。

Caddyfile配置

Caddyfile是Caddy的配置文件,默认位于/etc/caddy/Caddyfile路径下。

现在需要更新下配置文件,终端中依次输入下面命令:

sudo rm -rf /etc/caddy/Caddyfile
sudo vi /etc/caddy/Caddyfile

文件内容如下:

/etc/caddy/Caddyfile
{
email user@yours.com
log access-json {
output file /var/lib/caddy/log/access.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
format json
}
}

*.example.com, example.com {
header {
Strict-Transport-Security "max-age=63072000"
}
tls {
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
dns dnspod DNSPOD_TOKEN
}

@alist host alist.example.com
handle @alist {
reverse_proxy 127.0.0.1:5244
encode zstd gzip
}

handle {
abort
}
}
VI编辑器使用说明

输入i进入输入模式,粘贴上面的内容,然后按ESC回到正常模式,输入:wq即可退出并保存文件。

注意
  1. 将配置文件中的email、example.comDNSPOD_TOKEN分别修改为自己的实际邮箱、域名和Token。
  2. DNSPOD_TOKEN填写:由上步在DNSPOD控制台生成的ID和Token组合而成,格式为ID,Token,例如ID为123456,Token为abcdef,则DNSPOD_TOKEN123456,abcdef

修改完成后,重启caddy服务。

终端中输入下面命令:

sudo systemctl restart caddy
sudo systemctl status caddy

当出现类似下面提示,说明证书申请成功。

然后可以去浏览器打开https://alist.example.com测试是否正常访问。

Zotero配置

上面步骤成功完成后,下面就可以在Zotero首选项的同步菜单中,把服务器地址以域名的方式填写。

填写示例如下: