Caddy 使用入门

2022/4/10 caddy安装配置

Caddy 是一款基于 Go 语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。

如果只是想要一个 web 服务或者代理服务器,一般情况下使用 nginx 完全可以满足需求。但是如果是对外提供服务的站点,在现在浏览器环境下如果不配置 ssl,看起来就像是个不正规的网站,之前在 各种使用免费 ssl 证书的姿势 中提到过很多使用免费 ssl 证书的方法,其中最推荐大家使用的还是 Let’s Encrypt 的证书服务,但是有一个很现实的问题是使用起来太麻烦了,不仅要安装 Certbot,还要获取证书、定期更新等操作。

如果有一个 web 服务器只要简单配置,并且灰自动处理 SSL 证书申请续费这些问题用起来岂不是很方便?直到发现了 Caddy (opens new window) 才知道这种东西原来真的时存在的,并且配置 https 真的很简单。

Caddy 是第一个也是唯一一个 默认 自动使用 HTTPS 的 Web 服务器

# 通过 HTTPS 提供静态文件
$ caddy file-server --domain example.com

# 基于HTTPS的简单反向代理
$ caddy reverse-proxy --from example.com --to localhost:9000
1
2
3
4
5

只要在配置中提供了主机名,Caddy 默认对所有站点使用 HTTPS。看起来果然很简单,实际操作起来也很方便,下面给出一套简单的流程,更多配置建议参考 官方文档 (opens new window)

# 安装

以在 Ubuntu 上安装为例,其他版本安装请参考 install (opens new window)

# Ubuntu安装
$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
$ 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
1
2
3
4
5
6

# 配置

使用包安装完成后,默认情况下配置文件位置为 /etc/caddy/Caddyfile,支持 JSON 和 Caddyfile 文件两种配置文件,还可以通过调用 localhost: 2019 相关 api 操作。Caddyfile 文件写起来更友好一些,以此为例。

# 创建一个配置文件
$ vi Caddyfile
1
2

如果是单个站点

localhost

respond "Hello, world!"
1
2
3

如果是多个站点

localhost {
  respond "Hello, world!"
}

localhost:2016 {
  respond "Goodbye, world!"
}
1
2
3
4
5
6
7

保存并从 Caddyfile 所在的同一文件夹中通过 caddy run 来运行 Caddy,由于要使用 HTTPS,所以可能会要要求输入密码,如果是普通用户启动可能会报权限错误,需要提升权限后操作。

如果提示配置文件格式不正确,可以通过 caddy fmt --overwrite Caddyfile 格式化配置文件。

# curl或浏览器直接访问
$ curl https://localhost
Hello, world!
1
2
3

# 反向代理实例

配置 www.example.com 重定向到 example.com,反向代理到 localhost: 5000。

www.example.com {
  redir https://example.com{uri}
}

example.com {
  reverse_proxy localhost:5000
}
1
2
3
4
5
6
7

通过以上示例都可以看出来 Caddy 是一个简单实用的工具,虽然现在有些人在说比 Nginx 强多少或者替代之类的还不能轻易的下结论,毕竟 Nginx 的强大是有目共睹的,是否正真能撼动 Nginx 的霸主地位还需要时间的检验。不过在某些情况下,比如只是简单的一个代理或者静态服务器,但是又需要配置 ssl 的 i 情况下,试试 Caddy 不失为一个不错的方案。有兴趣的都可以试试,真的挺简单方便的。

# 参考