Caddy簡(jiǎn)介
Caddy是一款使用Go語(yǔ)言編寫(xiě)的開(kāi)源Web服務(wù)器和反向代理服務(wù)器,旨在提供易于使用且高效的性能。它支持HTTP/HTTPS協(xié)議,并可作為反向代理服務(wù)器、負(fù)載均衡器和WebSocket支持等。Caddy的靈活性和模塊化架構(gòu)使其適合容器化環(huán)境和微服務(wù)架構(gòu)。
Caddy的主要特點(diǎn)
- 默認(rèn)啟用HTTPS:Caddy集成了Let’s Encrypt,可以自動(dòng)申請(qǐng)、更新和管理SSL證書(shū),無(wú)需額外操作。
- 配置簡(jiǎn)潔:Caddy的配置文件(Caddyfile)簡(jiǎn)潔易讀,降低了新手的學(xué)習(xí)成本。
- 動(dòng)態(tài)配置管理:通過(guò)REST API,可以在運(yùn)行時(shí)更改Caddy的配置,無(wú)需重新啟動(dòng)服務(wù)器。
- 現(xiàn)代化特性:支持Prometheus metrics,使用結(jié)構(gòu)化的JSON作為訪問(wèn)日志。
Caddy與Nginx的對(duì)比
特性 | Caddy | Nginx |
---|
配置方式 | Caddyfile, JSON, REST API | Nginx配置文件(nginx.conf) |
自動(dòng)HTTPS支持 | 是,默認(rèn)啟用自動(dòng)TLS證書(shū)管理 | 否,需手動(dòng)配置SSL證書(shū) |
適用范圍 | 7層(應(yīng)用層),反向代理和Web服務(wù),內(nèi)置負(fù)載均衡 | 支持4層(傳輸層)和7層(應(yīng)用層)反向代理、負(fù)載均衡等 |
擴(kuò)展性 | 插件化架構(gòu),支持?jǐn)U展 | 模塊化架構(gòu),支持靜態(tài)編譯的模塊 |
性能 | 較高(適合輕量應(yīng)用) | 非常高(適合高并發(fā)應(yīng)用) |
配置簡(jiǎn)潔性 | Caddyfile格式簡(jiǎn)潔,易于上手 | 配置相對(duì)復(fù)雜,靈活但不夠直觀 |
系統(tǒng)資源占用 | 較低 | 較低,適合高并發(fā)處理 |
編寫(xiě)語(yǔ)言 | Go語(yǔ)言 | C語(yǔ)言 |
Access日志格式 | 結(jié)構(gòu)化,默認(rèn)JSON格式,支持自定義 | 非結(jié)構(gòu)化,默認(rèn)標(biāo)準(zhǔn)日志格式,支持自定義 |
Caddy的基本用法
安裝方式
- 二進(jìn)制安裝:下載Caddy的二進(jìn)制文件并移動(dòng)到PATH下即可使用。
- Docker Compose安裝:使用Docker容器快速部署Caddy。
Docker Compose配置示例:
version: "3.8"
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
environment:
- ACME_AGREE=true
volumes:
caddy_data:
caddy_config:
配置方式
- Caddyfile配置:簡(jiǎn)潔易讀的配置文件。
- JSON配置:適合高級(jí)使用場(chǎng)景和動(dòng)態(tài)配置。
- REST API配置:動(dòng)態(tài)管理和變更配置。
Caddyfile示例:
example.com {
reverse_proxy 127.0.0.1:3000
log {
output file /var/log/caddy/access.log {
mode 644
}
format json
}
}
JSON配置示例:
{
"apps": {
"http": {
"servers": {
"example": {
"listen": [":80"],
"routes": [
{
"match": [
{
"host": ["example.com"]
}
],
"handle": [
{
"handler": "static_response",
"body": "Hello, world!"
}
]
}
]
}
}
}
}
}
常見(jiàn)配置示例
1、直接回復(fù):
localhost:2017 {
respond "Hello, world!"
}
2、配置靜態(tài)文件:
localhost:2016 {
root * /var/www/mysite
file_server {
browse
hide .git
precompressed zstd br gzip
}
}
3、配置反向代理:
example.com {
reverse_proxy localhost:8000
}
4、配置負(fù)載均衡:
example.com {
reverse_proxy / backend1.example.com backend2.example.com
}
Caddy的持久化存儲(chǔ)
- 配置文件:自定義配置文件需要放置在合理的位置。
- 數(shù)據(jù)目錄:用于存儲(chǔ)TLS證書(shū)和其他關(guān)鍵數(shù)據(jù)。
- 配置目錄:保存最后一次有效的配置。
在使用Docker容器時(shí),需要掛載這些目錄以確保數(shù)據(jù)持久化。
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config