caddy(Caddy中文官网)

2024-08-2701:13:01综合资讯1

开源精选:Caddy - 可扩展的服务器平台

《开源精选》栏目分享来自 GitHub、Gitee 等开源社区的优质项目,涵盖技术、学习、实用和有趣的内容。本期推荐 Caddy,一款用 Go 语言编写的强大、可扩展的服务器平台,默认支持 TLS。

caddy(Caddy中文官网)

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" 嵌入 标签,使其成为可点击的链接。
这些修改使内容更加简洁明了,并提高了可读性。