本期推荐的Caddy 一个可扩展的服务器平台,默认使用 TLS。
Caddy 是一个强大的、可扩展的平台,可以为您的站点、服务和应用程序提供服务,用 Go 编写。使用Caddy 的 API配置是动态的和可导出的。虽然不需要配置文件,但您仍然可以使用它们;大多数人最喜欢配置 Caddy 的方式是使用Caddyfile。配置文档的格式有多种形式,带有配置适配器,但 Caddy 的原生配置语言是JSON。
特征Caddy
- 使用Caddyfile轻松配置
- 强大的配置及其原生 JSON 配置
- 使用JSON API进行动态配置
- 如果您不喜欢 JSON,请配置适配器
- 默认 自动 HTTPS
- 当其他服务器因 TLS/OCSP/证书相关问题而停机时保持正常运行
- 在处理数万亿个请求并管理数百万个 TLS 证书后,可投入生产
- 扩展到数以万计的站点……而且可能更多
- HTTP/1.1、HTTP/2 和实验性 HTTP/3支持
- 高度可扩展的 模块化架构让 Caddy 做任何事情都不会臃肿
- 在没有外部依赖的任何地方运行(甚至没有 libc)
- 用 Go 编写,一种比其他服务器具有更高内存安全保证的语言
Caddy安装
Debian、Ubuntu、Raspbian
安装此软件包会自动启动并运行 Caddy 作为名为的systemd 服务,如果您需要,caddy还附带一个默认未caddy-api启用的服务。
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
sudo apt install caddy
测试版本(包括 beta 和候选版本):
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/testing/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-testing-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/testing/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-testing.list
sudo apt update
sudo apt install caddy
Fedora、红帽、CentOS
这个包附带了 Caddy 的两个systemd 服务单元文件,但默认情况下不启用它们。
Fedora 或 RHEL/CentOS 8:
dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy
RHEL/CentOS 7:
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy
Webi
Linux 和 macOS:
curl -sS https://webinstall.dev/caddy | bash
windows:
curl.exe -A MS https://webinstall.dev/caddy | powershell
您可能需要调整 Windows 防火墙规则以允许非本地主机传入连接。
快速入门
首先启动Caddy:
caddy start
Caddy 当前处于空闲状态(配置为空白)。给它一个简单的配置curl:
curl localhost:2019/load \
-H "Content-Type: application/json" \
-d @- << EOF
{
"apps": {
"http": {
"servers": {
"hello": {
"listen": [":2015"],
"routes": [
{
"handle": [{
"handler": "static_response",
"body": "Hello, world!"
}]
}
]
}
}
}
}
}
使用Heredoc提供 POST 正文可能很乏味,因此,如果您更喜欢使用文件,请将 JSON 保存到名为的文件中caddy.json,然后改用以下命令:
curl localhost:2019/load \
-H "Content-Type: application/json" \
-d @caddy.json
现在在浏览器中加载localhost:2015curl或使用:
curl localhost:2015
Hello, world!
我们还可以使用这个 JSON 在不同的接口上定义多个站点:
{
"apps": {
"http": {
"servers": {
"hello": {
"listen": [":2015"],
"routes": [
{
"handle": [{
"handler": "static_response",
"body": "Hello, world!"
}]
}
]
},
"bye": {
"listen": [":2016"],
"routes": [
{
"handle": [{
"handler": "static_response",
"body": "Goodbye, world!"
}]
}
]
}
}
}
}
}
更新您的 JSON,然后再次执行 API 请求。
在浏览器中尝试新的“再见”端点,或使用curl以确保它有效:
curl localhost:2016
Goodbye, world!
完成 Caddy 后,请务必停止它:
caddy stop
反向代理快速入门
先决条件:
- 基本的终端/命令行技能
- caddy在你的路径中
- 要代理到的正在运行的后端进程
在您的终端中,运行以下命令:
caddy reverse-proxy --to 127.0.0.1:9000
如果您无权绑定到低端口,则可以从较高端口代理:
caddy reverse-proxy --from :2016 --to 127.0.0.1:9000
然后向localhost(或您在 中指定的任何地址–from)发出请求以查看它是否正常工作!
在当前工作目录中,创建一个名为Caddyfile以下内容的文件:
localhost
reverse_proxy 127.0.0.1:9000
然后,从同一目录运行:
caddy run
然后,您可以向https://localhost发出请求以查看它是否正常工作!
HTTPS 和端口
Caddy 的默认端口不再是:2015. Caddy 2 的默认端口是:443,或者,如果不知道主机名/IP,则为 port :80。您始终可以在配置中自定义端口。
如果主机名或 IP 已知, Caddy 2 的默认协议始终是 HTTPS 。这与 Caddy 1 不同,在 Caddy 1 中,默认情况下只有公开域名使用 HTTPS。现在,每个站点都使用 HTTPS(除非您通过明确指定端口:80或禁用它http://)。
IP 地址和 localhost 域将从本地受信任的嵌入式 CA颁发证书。所有其他域将使用 ZeroSSL 或 Let’s Encrypt。(这都是可配置的。)
证书和 ACME 资源的存储结构发生了变化。Caddy 2 可能会为您的站点获得新证书;但是如果您有很多证书,如果它不适合您,您可以手动迁移它们。
—END—
开源协议:Apache-2.0 license