Administrator
发布于 2025-04-16 / 11 阅读
0
1

Ubuntu22.04.4安装caddy配置https证书并自动续期

引言

Caddy是使用Go语言编写的一款开源Web服务器和反向代理服务器,设计目标是提供易于使用且高效的性能。它不仅支持常见的HTTP/HTTPS协议,还可以作为反向代理服务器、负载均衡器、WebSocket支持等。它的灵活性和模块化的架构,使其能够根据不同需求扩展功能,特别适合用于容器化环境和微服务架构。

一提起反向代理服务器,就不得不提到大名鼎鼎的nginx,作者本人一开始也是使用的nginx,但是申请https证书和维护证书比较麻烦,因此决定采用caddy,配置https自动续期。

以下是两种工具的对比。

特性

Caddy

Nginx

配置方式

Caddyfile, JSON, REST API

Nginx配置文件(nginx.conf)

自动HTTPS支持

是,默认启用自动TLS证书管理

否,需手动配置SSL证书

适用范围

7层(应用层),反向代理和Web服务,内置负载均衡

支持4层(传输层)和7层(应用层)反向代理、负载均衡等

扩展性

插件化架构,支持扩展

模块化架构,支持静态编译的模块

性能

较高(适合轻量应用)

非常高(适合高并发应用)

配置简洁性

Caddyfile格式简洁,易于上手

配置相对复杂,灵活但不够直观

系统资源占用

较低

较低,适合高并发处理

编写语言

Go语言

C语言

Access日志格式

结构化,默认JSON格式,支持自定义

非结构化,默认标准日志格式,支持自定义

前提

以作者本人为例,作者已购买阿里云的服务器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等问题,清掉浏览器缓存即可。


评论