SaturdayClub

SaturdayClub

生产力 | 使用Caddy进行域名反代并自动申请ssl

281
2023-02-06
生产力 |  使用Caddy进行域名反代并自动申请ssl

前记

天下苦nginx久矣~!

最近迁移博客,想着之前在服务器上转了各种乱七八糟的东西,心一横,将需要的服务备份后,直接重装系统,从头来过。

之前在vultr上的vps装naive,体验了一下cadddy2反代,简直是懒人福利,这次迁移博客和其他服务的时候,果断跑路投入caddy的怀抱。

记录一下caddy的安装和使用

安装caddy

先简单介绍一下caddy,它是由Golang写的一个高效的webserver,相比nginx,配置起来更加简便,同时支持自动化的ss证书申请、配置和续约(这一点太棒了)。

  • 个人环境

    • Debian10

  • 添加源

$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" \
    | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
  • 使用apt安装caddy

$sudo apt update 
$sudo apt install caddy

安装完成后caddy会自动注册一个system服务。

使用 systemctl start caddy 可以开启服务;

使用 systemctl statues caddy 可查看服务状态。

root@VM-0-7-debian:~# systemctl status caddy
● caddy.service - Caddy
   Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2023-03-03 12:45:12 CST; 20s ago
     Docs: https://caddyserver.com/docs/
 Main PID: 24905 (caddy)
    Tasks: 7 (limit: 2047)
   Memory: 33.4M
   CGroup: /system.slice/caddy.service
           └─24905 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

配置文件

安装完成后,系统会在 /etc 生成一个caddy文件夹,文件夹里就有需要配置的Caddyfile文件。

  • 使用编辑器打开文件

$sudo vim /etc/caddy/Caddyfile
  • 在配置文件中编辑如下内容即可

#exaple.com 是你的域名  8080是服务的端口
example.com {
    reverse_proxy 127.0.0.1:8080
}

使用 systemctl reload caddy 重新加载服务即可。

哒哒,一个超简单的反代就搞定了。

启动SSL

在Caddy中启用SSL,可以使用Caddy的自动证书管理器(ACME)功能。ACME是由Let’s Encrypt维护的一个开放式证书颁发机构,可为网站免费提供SSL/TLS证书。

在Caddy中启用自动证书管理器功能,需要将Caddyfile文件稍微修改一下:

{ 
    email [email protected] 
    acme_ca https://acmev02.api.letsencrypt.org/directory 
}
example1.com {
	reverse_proxy 127.0.0.1:8000
	encode gzip
	tls {
	on_demand
	}
}

example2.com {
	reverse_proxy 127.0.0.1:8080
	encode gzip
	tls {
	on_demand
	}
}

这段配置里,email指定你的电子邮件地址,在证书到期或需要更新时会发送通知。

acme_ca指令指定使用的ACME证书颁发机构的网址。这个示例使用Let’s Encrypt的ACME服务器。

tls指令启用SSL,并将证书自动管理为on_demand模式。在这个模式下,Caddy将根据需要自动申请证书,这样就不必手动为每个域名请求证书。启动Caddy时,它将使用ACME服务器自动请求SSL/TLS证书并将其绑定到指定的域名。证书将在每90天自动更新一次。

需要注意的是,在使用Caddy的ACME功能之前,需要确保域名已经解析到了您的服务器上,并且端口80和443没有被其他程序使用。