引言
Caddy是使用Go语言编写的一款开源Web服务器和反向代理服务器,设计目标是提供易于使用且高效的性能。它不仅支持常见的HTTP/HTTPS协议,还可以作为反向代理服务器、负载均衡器、WebSocket支持等。它的灵活性和模块化的架构,使其能够根据不同需求扩展功能,特别适合用于容器化环境和微服务架构。
一提起反向代理服务器,就不得不提到大名鼎鼎的nginx,作者本人一开始也是使用的nginx,但是申请https证书和维护证书比较麻烦,因此决定采用caddy,配置https自动续期。
以下是两种工具的对比。
前提
以作者本人为例,作者已购买阿里云的服务器1台(自带公网IP)、域名1个(需要备案),并在本地VM3上部署了halo服务,通过frp将本地的halo服务端口穿透到云服务器的公网ip上,如下图
云服务器OS:Ubuntu 22.04.4 LTS
云服务器IP:120.79.121.211,且配置nginx,将所有80端口的流量转发到halo的内网穿透端口8090
域名:yekunlee.com
本地VM3虚拟机:Ubuntu 24.04.2 LTS

云服务器已与域名绑定,且开通防火墙
如下图,通过frp工具,将halo的服务端口8090穿透到云服务器的80端口上

然后通过nginx配置反向代理,将云服务器的80端口的流量通过frp全部转发到本地的VM3 halo服务端口8090上

这种做法的好处是可以直接通过http访问本人的个人博客网站perfSpace,在浏览器输入http://www.yekunlee.com即可直接访问

此时浏览器左上角显示网站不安全,原因是博客网站使用的http协议,本身就是明文传输,不安全,需要配置成https协议,但是目前市面上大多数https证书都不是免费的,申请证书需要付费,且到期后维护起来也麻烦。
本文介绍如何使用开源代理服务器caddy,自动进行https配置且续期证书。
操作步骤
停止nginx(如果有)
例:
sudo systemctl stop nginx
或者ps命令找到进程id,手动kill进程
安装caddy
在阿里云服务器上安装caddy,作者本人是Ubuntu22.04.4
# 添加 Caddy 官方仓库
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
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
# 安装 Caddy
sudo apt install caddy配置caddy并启动服务
执行nano命令编辑配置文件,此处我们是要把所有访问www.yekunlee.com的流量都转发到云服务器的8090端口,因此参考如下配置
sudo nano /etc/caddy/Caddyfile
注:redir注释掉了,是因为本人在之前nginx也配置了https强制跳转,导致了https重定向循环

按下ctrl + x保存,再执行以下命令启动
sudo systemctl enable caddy
sudo systemctl start caddy
sudo systemctl status caddy # 检查状态一键式配置证书
上一步启动完成后,caddy会自动获取证书,我们先访问 https://www.yekunlee.com,可以看到由 Let's Encrypt 签发的证书已经生效了

第二步,我们只需要检查是否自动续期证书即可
如下图,证书已经自动续期成功

Caddy 是默认自动续期证书的。我们也可以通过命令手动测试续期:
sudo caddy renew --force成果检验
浏览器直接输入https://www.yekunlee.com
注意,可能出现cookie等问题,清掉浏览器缓存即可。