最近搭建服务了解到了Caddy这个反向代理服务器,它比Nginx轻量,Caddy内置了一个ACME(Automatic Certificate Management Environment)客户端,它能够自动与 Let's Encrypt 等证书颁发机构通信,获取免费的SSL/TLS证书。免去手动配置的流程,配置代理也非常简单。

下面以ubuntu20为例,记录下Caddy服务的搭建流程。

初始工作

首先通过 sudo apt update 命令更新系统的软件包列表,然后安装所需要的依赖

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

APT存储库

Caddy官方提供了GPG密钥和APT存储库,以便用户可以轻松地通过APT安装Caddy。首先,添加Caddy的GPG密钥:

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

更新apt软件包列表

sudo apt update

最后就可以通过apt来安装Caddy了

sudo apt install caddy

Caddy配置

Caddy配置文件一般默认在 /etc/caddy/Caddyfile 目录下,如果直接 systemctl start caddy 命令启动,就会使用该目录下的配置文件,我们也可以通过 caddy run --config /path/to/Caddyfile 来制定配置,一个简单的配置如下。

:80 {
  # 静态文件目录
  root * /usr/share/caddy
  # 开启静态服务
  file_server
}  

如果配置域名反向代理到目标服务,直接新增以下配置即可,非常简单。

www.kelen.cc {  
  reverse_proxy localhost:8080  
}

上述配置,Caddy会自动帮我们申请一个 www.kelen.cc 的免费证书,关键还会帮我们自动续期。简直无敌。证书的目录在 /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/ 里,如果有需要可以在此目录查看响应的证书文件。

Caddy常用命令

  • 停止Caddy服务
sudo systemctl stop caddy
  • 启动Caddy服务
sudo systemctl start caddy
  • 设置Caddy开启自启
sudo systemctl enable caddy
  • 查看Caddy服务状态
sudo systemctl status caddy