进阶使用
在上篇教程中介绍了如何使用http协议进行Zotero同步,但是这种方式安全性较低,在Zotero的iOS客户端中已经强制要求必须使用https协议进行同步。
本期教程介绍如何搭建https服务器实现Zotero的多设备同步。
本教程以example.com
作为示例域名,用户需要自行将所有地方出现的example.com
修改为自己的实际域名。
域名购买
为了使用https访问,你需要先申请一个域名,例如example.com
。下面列举一些常用的域名服务提供商,用户可自行选择:
一般建议你的云服务器是哪家的,就选择哪家的域名服务。
域名解析
域名购买后,可以在域名控制台中将域名解析到你的云服务器的公网IP上。
例如将alist.example.com
解析到你的公网IP上。
下面以腾讯云和阿里云分别进行演示。
- 腾讯云域名
- 阿里云域名
打开腾讯云域名控制台,选择自己的域名右侧的"解析"按钮。
添加A类型解析记录,记录值填写公网IP。
打开云解析DNS控制台,点击『添加记录』按钮。
添加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 Encrypt或ZeroSSL申请、配置和续期免费的域名证书,比较方便。当然如果你已经有了域名证书,也可以在Caddy中直接指定。
Caddy支持多种自动申请证书的方式 ,如HTTP challenge和DNS challenge等, 详见:Automatically HPPS | Caddy。
Let's Encrypt的泛域名证书只能通过DNS challenge方式获取。
这里主要介绍使用DNS challenge的方式。
- 腾讯云域名
- 阿里云域名
- 其他域名厂商
安装带插件版本Caddy
前面安装的Caddy是标准版的,包含全部核心功能。但是Caddy也包含了丰富的插件生态,用来扩展其功能。
例如这里申请腾讯云域名证书就要使用到dns.providers.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访问密钥
登录DNSPod 账号中心控制台,按如下图所示创建DNSPOD Token。
点击确认就会弹窗告知生成的ID
和Token
,记录下这两个值后面会用到。
安装带插件版本Caddy
前面安装的Caddy是标准版的,包含全部核心功能。但是Caddy也包含了丰富的插件生态,用来扩展其功能。
例如这里申请阿里云域名证书就要使用到dns.providers.alidns插件提供的功能。
可以去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访问密钥
登录阿里云控制台,点击右上角头像,进入AccessKey管理
菜单。
点击"创建AccessKey"按钮。
保管好生成的AccessKey ID
和AccessKey Secret
,后面会用到。
如果你使用的其他厂商的域名,可以去Caddy官网上搜索对应厂商的dns名称,查看对应的安装与配置方法。
Caddyfile配置
Caddyfile
是Caddy的配置文件,默认位于/etc/caddy/Caddyfile
路径下。
现在需要更新下配置文件,终端中依次输入下面命令:
sudo rm -rf /etc/caddy/Caddyfile
sudo vi /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
}
}
输入i
进入输入模式,粘贴上面的内容,然后按ESC
回到正常模式,输 入:wq
即可退出并保存文件。
- 将配置文件中的email、
example.com
、DNSPOD_TOKEN
分别修改为自己的实际邮箱、域名和Token。 DNSPOD_TOKEN
填写:由上步在DNSPOD控制台生成的ID和Token组合而成,格式为ID,Token
,例如ID为123456
,Token为abcdef
,则DNSPOD_TOKEN
为123456,abcdef
。
文件内容如下:
{
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 alidns {
access_key_id ALIYUN_ACCESS_KEY_ID
access_key_secret ALIYUN_ACCESS_KEY_SECRET
}
}
@alist host alist.example.com
handle @alist {
reverse_proxy 127.0.0.1:5244
encode zstd gzip
}
handle {
abort
}
}
输入i
进入输入模式,粘贴上面的内容,然后按ESC
回到正常模式,输入:wq
即可退出并保存文件。
- 将配置文件中的email、
example.com
分别修改为自己的实际邮箱、域名。 ALIYUN_ACCESS_KEY_ID
为上步在阿里云控制台生成的AccessKey ID
,ALIYUN_ACCESS_KEY_SECRET
为生成的AccessKey Secret
。
修改完成后,重启caddy服务。
终端中输入下面命令:
sudo systemctl restart caddy
sudo systemctl status caddy
当出现类似下面提示,说明证书申请成功。
然后可以去浏览器打开https://alist.example.com
测试是否正常访问。
Zotero配置
上面步骤成功完成后,下面就可以在Zotero首选项的同步菜单中,把服务器地址以域名的方式填写。
填写示例如下:
- 电脑端
- iOS端