点击上方蓝字关注我们
IT 咖啡馆,探索无限可能!
恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。
Web服务器有非常多,比如Apache,Nginx,IIS,Tomcat,weblogic等等,一只手数不过来。
今天我们分享的开源项目,它是一个go语言写的开源web服务器,具备自动HTTPS和灵活配置的能力,它就是:Caddy
Caddy 是什么
Caddy 是一个现代化的 Web 服务器,旨在简化配置和管理。它支持自动获取和更新 TLS 证书,确保所有站点默认通过 HTTPS 提供服务。Caddy 的设计目标是提供一个安全、快速且易于使用的服务器解决方案。
作为一个web服务器,那Caddy总会和老大哥nginx来作对比,虽然从目前的市场占比来说还远远无法企及,但是在GitHub上面Caddy的star数量倒是确实超过了Nginx。
Caddy的特点包括了以下。
自动 HTTPS:Caddy 默认启用 HTTPS,并自动管理 TLS 证书。
易于配置:支持简单的 Caddyfile 配置文件和强大的 JSON 配置。
动态配置:通过 JSON API 实现在线配置管理。
反向代理:提供灵活且强大的 HTTP 反向代理功能。
静态文件服务器:生产就绪的静态文件服务器,有过数万亿请求验证,可拓展到数十万个站点,官方已验证。
跨平台支持:支持 Linux、Windows、macOS 等多种操作系统。
高性能:使用 Go 语言编写,具备高性能和内存安全性。
安装 Caddy
包管理器
包管理器
你可以通过Linux的包管理器来安装Caddy,例如Ubuntu系统可以使用如下:
sudo apt install caddy
二进制文件
Caddy项目提供了编译好的版本,在 GitHub Releases页面,根据自己的平台选择对应的包,下载 Caddy并将可执行文件放在您的 PATH 中即可。
源码编译
另外你也可以从源码开始自己编译,可以参考一下的命令:
git clone "<https://github.com/caddyserver/caddy.git>"
cd caddy/cmd/caddy/
go build
同时项目提供了一个自己的编译工具,可以使用它来编译
xcaddy build
这个工具会自动执行以下的步骤:
创建新文件夹:
mkdir caddy
改成:
cd caddy
将Caddy 的 main.go 复制到空文件夹中。添加要添加的任何自定义插件的导入。
初始化 Go 模块:
go mod init caddy
(可选)Pin Caddy 版本:用 git 标签、提交或分支名称
go get github.com/caddyserver/caddy/v2@versionversion
替换。(可选)通过添加导入来添加插件:
_ "import/path/here"
编译:
go build
使用Caddy
要将 Caddy 作为守护进程启动,请使用run
子命令
caddy run
启动之后会在2019端口提供一个管理API,可以通过REST API向这个端口发送指令来配置Caddy。可以先curl一下来验证。
curl localhost:2019/config/
JSON配置
接下来我们来看一下如何通过文件来配置Caddy,从本质上讲,Caddy 的配置只是一个JSON文件。以下是一个参考的配置JSON
{
"apps": {
"http": {
"servers": {
"example": {
"listen": [":2015"],
"routes": [
{
"handle": [{
"handler": "static_response",
"body": "Hello, world!"
}]
}
]
}
}
}
}
}
然后我们通过管理API来上传这个配置
curl localhost:2019/load \\
-H "Content-Type: application/json" \\
-d @caddy.json
打开浏览器,访问 http://localhost:2015
,你将看到 "Hello, world!" 的响应。
Caddyfile
配置 Caddy 的另一种方法是使用 Caddyfile 。我们上面在 JSON 中编写的相同配置可以简单地表示为:
:2015
respond "Hello, world!"
把这个配置保持下来,然后先关掉Caddy,然后执行以下:
caddy adapt --config /path/to/Caddyfile
Caddy 会自动根据Caddyfile的内容来生成JSON配置。
简化的操作就是直接使用Caddyfile来运行,在run命令后面加上—config Caddyfile的位置即可
caddy run --config /path/to/Caddyfile
以下是一个对于JSON和的Caddyfile对比
自动HTTPS
自动 HTTPS 为您的所有站点预置 TLS 证书,并保持其续订状态。它还会为您将HTTP重定向到HTTPS!Caddy 使用安全和现代的默认值 - 无需停机时间、额外配置或单独的工具。Caddy使用Let's Encrypt 或ZeroSSL证书通过HTTPS提供公共DNS名称。Caddy 会更新所有托管证书,并自动将 HTTP(默认端口 80)重定向到 HTTPS(默认端口 443)。
总结
总的来说Caddy是一个很容易上手的web服务器,它具备的自动HTTPS功能还是很有帮助的,另外它的灵活性和扩展性也很吸引人,如果有兴趣的话可以自己动手来试一试。
项目信息
项目名称:caddy
GitHub 链接:https://github.com/caddyserver/caddy
Star 数:56K