Caddy是一個強大且可擴展的Web服務器、代理服務器。Caddy使用Go語言開發,支持HTTP/2IPv6、Markdown、WebSockets、FastCGI、模板等等,目前已經超過42k star。
功能特性
- 相比Nginx,使用Caddyfile配置更加簡單,同樣也支持JSON配置
- 默認支持HTTP/2協議,無需單獨配置
- 自動獲取和更新TSL/OCSP證書,無需擔心過期宕機問題
- 高度可擴展的模塊化架構讓 Caddy 做任何事情都不會臃腫
- 可以在任何平臺運行,無需外部依賴
- 基于Go開發,保證內存安全
- 可輕松擴展到集群環境
Debian、Ubuntu、Raspbian:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-HTTPS curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
Fedora 或 RHEL/centos 8:
dnf install 'dnf-command(copr)' dnf copr enable @caddy/caddy dnf install caddy
RHEL/CentOS 7:
yum install yum-plugin-copr yum copr enable @caddy/caddy yum install caddy
API使用入門
運行在2015端口并輸出 Hello, world!
啟動Caddy:
$caddy start
添加一個配置:
$curl localhost:2019/load -H "Content-Type: Application/json" -d @- << EOF { "apps": { "http": { "servers": { "hello": { "listen": [":2015"], "routes": [ { "handle": [{ "handler": "static_response", "body": "Hello, world!" }] } ] } } } } } EOF
瀏覽器加載:
$curl localhost:2015 Hello, world!
反向代理簡單配置
運行以下命令:
caddy reverse-proxy --to 127.0.0.1:9000
如果沒有權限,可以綁定較高端口代理:
caddy reverse-proxy --from :2016 --to 127.0.0.1:9000
在Caddy目錄中創建一個Caddyfile并包含以下內容:
localhost reverse_proxy 127.0.0.1:9000
然后,從同一目錄運行:
caddy run
運行后,可以發送請求到 https://localhost 查看是否正常工作。
更改代理地址也很容易:
:2016 reverse_proxy 127.0.0.1:9000
更改完成后,更新啟動Caddy即可在localhost:2016訪問代理。
Caddyfile結構
caddy大部分配置都基于獨創的Caddyfile完成,以下是它的結構:
- Global options block 服務器全局配置:可用于配置是否啟用 HTTPS 和 Admin API 等
- Snippet 可以復用的配置片段:定義好后認可以通過 import 關鍵字引用
- Site Block 單個網站配置:通過 file_server 可以配置靜態代理,通過 reverse_proxy 可以配置動態代理
- Matcher definition 匹配定義:默認情況下指令會產生全局影響,通過它可以指定影響范圍
- Comment 注釋:使用#符號開頭
- Site address 網站地址:默認使用 HTTPS ,如需開啟 HTTP ,需要指定 http:// 開頭
- Directive 指令:指令賦予了 Caddy 強大的功能
開源協議:Apache2.0
開源地址:https://github.com/caddyserver/caddy