Caddy 简介
Caddy 是一个用 Go 语言编写的开源 Web 服务器,具有以下特点:
- 自动 HTTPS:Caddy 自动为你的站点获取和更新 SSL 证书,无需手动配置。
- 简洁的配置:Caddy 使用 Caddyfile 作为配置文件,语法简单易懂。
- 高性能:Caddy 基于 Go 语言,具有出色的性能和低资源消耗。
- 模块化设计:Caddy 支持插件扩展,可以根据需要添加功能。
Caddy 的核心原理是通过监听 HTTP/HTTPS 请求,并根据配置文件中的规则将请求转发到相应的后端服务。Caddy 的配置文件(Caddyfile)定义了如何处理不同的域名和路径。
Caddy 和 Nginx 的区别
Caddy 和 Nginx 都是流行的 Web 服务器和反向代理工具,广泛应用于现代 Web 开发中。尽管它们的功能相似,但在设计理念、配置方式、性能特性等方面存在显著差异。以下是两者的主要区别:
- 设计理念:
- Caddy:简化 Web 服务器的配置和管理,提供开箱即用的功能。
- Nginx:提供高性能、高并发的 Web 服务器和反向代理。
- 配置方式:
- Caddy:使用 Caddyfile,语法简洁直观。
- Nginx:使用自定义的配置文件,语法复杂但功能强大。
- 性能
Caddy:性能良好,适合中小型应用。
Nginx:性能卓越,适合高并发、高性能场景。
- 自动 HTTPS
Caddy:默认启用,自动从 Let's Encrypt 获取证书。
Nginx:需要手动配置 SSL 证书。
- 插件/模块
Caddy:插件生态正在发展。
Nginx:模块生态丰富。
- 适用场景
Caddy:适合中小型应用、开发环境。
Nginx:适合高并发场景、生产环境。
使用 Docker 安装 Caddy
安装 Docker、Docker Compose
首先,确保你的系统上已经安装了 Docker。如果尚未安装,可以参考 安装指南
创建 Caddy 配置文件
在项目目录下创建一个名为 Caddyfile
的文件,用于定义 Caddy 的配置。以下是一个简单的示例:
example.com {
reverse_proxy /api/* localhost:8000
reverse_proxy /static/* localhost:8001
}
anotherexample.com {
reverse_proxy / localhost:9000
}
在这个配置中:
example.com 和 anotherexample.com 是两个不同的域名。
example.com 的 /api/_ 路径被代理到 localhost:8000,而 /static/_ 路径被代理到 localhost:8001。
anotherexample.com 的所有请求都被代理到 localhost:9000。
创建 Docker Compose 文件
为了简化 Caddy 的部署,我们可以使用 Docker Compose。在项目目录下创建一个名为 docker-compose.yml 的文件,内容如下:
version: '3.7'
services:
caddy:
image: caddy:latest
container_name: caddy
ports:
- '80:80'
- '443:443'
- '443:443/udp'
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
restart: unless-stopped
volumes:
caddy_data:
caddy_config:
在这个配置中:
使用 caddy:latest 镜像启动一个名为 caddy 的容器。
将主机的 80 和 443 端口映射到容器的相应端口。
将本地的 Caddyfile 挂载到容器的 /etc/caddy/Caddyfile 路径。
使用两个 Docker 卷 caddy_data 和 caddy_config 来持久化 Caddy 的数据和配置。
启动 Caddy
在项目目录下运行以下命令启动 Caddy:
docker-compose up -d
Caddy 容器将会启动,并根据 Caddyfile 中的配置开始监听请求。
验证配置
你可以通过访问 http://example.com 和 http://anotherexample.com 来验证配置是否正确。Caddy 会自动处理 HTTPS 请求,并为你的域名获取 SSL 证书。
高级配置
自定义 SSL 证书
如果你已经有自己的 SSL 证书,可以通过以下方式配置:
example.com {
tls /path/to/cert.pem /path/to/key.pem
reverse_proxy / localhost:8000
}
负载均衡
Caddy 支持简单的负载均衡配置。例如,将请求分发到多个后端服务器:
example.com {
reverse_proxy / localhost:8000 localhost:8001 localhost:8002
}
使用环境变量
Caddy 支持使用环境变量来动态配置。例如:
example.com {
reverse_proxy / {env.BACKEND_HOST}
}
在 docker-compose.yml 中定义环境变量:
environment:
- BACKEND_HOST=localhost:8000
NOTE
更多配置请参考 官方文档
结语
通过 Docker 安装和配置 Caddy,我们可以轻松地实现多域名代理,并将不同的请求转发到不同的后端服务。Caddy 的自动 HTTPS 功能和简洁的配置语法使其成为现代 Web 开发的理想选择。希望本文能帮助你快速上手 Caddy,并在实际项目中应用它。
Happy reading!