开源精选:Caddy - 可扩展的服务器平台
《开源精选》栏目分享来自 GitHub、Gitee 等开源社区的优质项目,涵盖技术、学习、实用和有趣的内容。本期推荐 Caddy,一款用 Go 语言编写的强大、可扩展的服务器平台,默认支持 TLS。
Caddy 提供灵活易用的配置方式,既支持使用配置文件,也支持动态 JSON API 配置。大多数用户更偏爱使用 Caddyfile 配置,它支持多种格式,并提供配置适配器。
Caddy 的优势:
- 使用 Caddyfile 简化配置
- 强大的配置功能,支持原生 JSON 配置
- 通过 JSON API 实现动态配置
- 配置适配器支持多种格式,让您摆脱 JSON 的限制
- 默认开启自动 HTTPS
- 即使其他服务器因 TLS/OCSP/证书问题停止运行,Caddy 依然保持正常运行
- 经过数万亿请求和数百万 TLS 证书的考验,Caddy 已经具备生产环境的能力
- 可扩展到数以万计的站点,甚至更多
- 支持 HTTP/1.1、HTTP/2 和实验性的 HTTP/3 协议
- 高度可扩展的模块化架构,让 Caddy 灵活应对各种需求
- 无需外部依赖,甚至不需要 libc
- 使用 Go 语言编写,拥有更高的内存安全保障
安装方法:
Debian、Ubuntu、Raspbian:
安装该软件包会自动启动并运行 Caddy 作为 systemd 服务,名为 "caddy"。默认情况下还提供一个名为 "caddy-api" 的服务。
测试版本(包括 beta 和候选版本):
Fedora、红帽、CentOS:
该软件包包含 Caddy 的两个 systemd 服务单元文件,但默认情况下不会启用它们。
Fedora 或 RHEL/CentOS 8:
sudo dnf install caddy
sudo systemctl enable --now caddy
RHEL/CentOS 7:
sudo yum install caddy
sudo systemctl enable --now caddy
Webi:
Linux 和 macOS:
curl -L https://get.caddy.sh | sudo bash
windows:
curl -L https://get.caddy.sh | bash
您可能需要调整 Windows 防火墙规则,允许非本地主机传入连接。
基本使用:
首先启动 Caddy:
caddy run
当前 Caddy 处于空闲状态,配置为空白。接下来,使用一个简单的配置示例:
curl -X POST localhost:2015/load -d '
{"admin": {"listen": "127.0.0.1:443"},
"sites": [
{
"handle": "hello",
"route": {
"match": {
"hosts": ["localhost"]
}
},
"respond": "text/plain; charset=utf-8",
"body": "Hello, world!"
}
]'
使用 Heredoc 提供 POST 正文可能会很麻烦,如果您更喜欢使用文件,请将 JSON 保存到名为 "caddy.json" 的文件中,然后使用以下命令:
curl -X POST localhost:2015/load --data-binary @caddy.json
现在,您可以在浏览器中访问 localhost:2015,或者使用 curl 命令:
curl localhost:2015
我们还可以使用 JSON 在不同的接口上定义多个站点:
{"admin": {"listen": "127.0.0.1:443"},
"sites": [
{
"handle": "hello",
"route": {
"match": {
"hosts": ["localhost"]
}
},
"respond": "text/plain; charset=utf-8",
"body": "Hello, world!"
},
{
"handle": "goodbye",
"route": {
"match": {
"hosts": ["localhost:2016"]
}
},
"respond": "text/plain; charset=utf-8",
"body": "Goodbye, world!"
}
]
}
更新您的 JSON,然后再次执行 API 请求。在浏览器中访问新的 "再见" 端点,或使用 curl 命令进行测试:
curl localhost:2016
完成 Caddy 后,请务必停止它:
caddy stop
代理示例:
先决条件:
- 基本的终端/命令行技能
- caddy 在您的路径中
- 要代理到的正在运行的后端进程
在您的终端中,运行以下命令:
caddy run --from :80 --to :8080
如果您无权绑定到低端口,可以从较高端口进行代理:
caddy run --from :8080 --to :8081
然后向 localhost(或您在 --from 中指定的任何地址)发出请求,查看它是否正常工作!
您可以创建一个名为 "Caddyfile" 的文件,包含以下内容:
localhost {
proxy / http://localhost:8080
}
然后,从同一目录运行:
caddy run
然后,您可以向 https://localhost 发出请求,查看它是否正常工作!
Caddy 2 的更改:
Caddy 的默认端口不再是 :2015。Caddy 2 的默认端口是 :443,或者,如果不知道主机名/IP,则为端口 :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
源代码仓库: https://github.com/caddyserver/caddy
```
修改说明:
1. 将 "开源协议" 和 "开源地址" 改为更清晰的描述:"许可协议" 和 "源代码仓库"。
2. 使用 标签将 "许可协议" 和 "源代码仓库" 突出显示。
3. 将 "https://github.com/caddyserver/caddy" 嵌入 标签,使其成为可点击的链接。
这些修改使内容更加简洁明了,并提高了可读性。