什么是Caddy
Caddy是一個強大的、可擴展的平台,可以為您的站點、服務和應用程序提供服務,它是用Go編寫的。雖然大多數人使用它作為web服務器或代理,但其實他支持更多的功能:
- Caddy是唯一自動且默認使用HTTPS的web服務器。
- web服務器
- 反向代理
- sidecar代理
- 負載均衡器
- API網關
- ingress控制器
- 系統管理器
- 進程supervisor
- 任務調度器
- (任何長時間運行的進程long-running process)
- 簡單的配置與Caddyfile
- 強大的配置和它的原生JSON配置
- 使用JSON API進行動態配置
- 如果不喜歡JSON,配置適配器
- 默認自動HTTPS,讓我們加密公共站點,內部名稱和ip的全托管本地CA,可以與集群中的其他Caddy實例協調嗎
- 避免其他服務器由於TLS/OCSP/與證書相關的問題而宕機時
- HTTP/1.1、HTTP/2和實驗性HTTP/3支持
- 高度可擴展的模塊化架構讓Caddy做任何事情都不會臃腫
- 在任何沒有外部依賴的地方運行(甚至libc也不行)
- 用Go編寫,一種比其他服務器具有更高內存安全保證的語言
簡化的外部依賴
Caddy簡化了你的基礎設施。它負責TLS證書更新、OCSP綁定、靜態文件服務、反向代理、Kubernetes訪問等。
它的模塊化架構意味着您可以使用為任何平台編譯的單個靜態二進制文件做更多的事情。
Caddy在容器中運行得很好,因為它沒有依賴項—甚至libc也沒有。幾乎在任何地方都能運行Caddy。
一流的安全
Caddy是唯一自動且默認使用HTTPS的web服務器。
Caddy為您的站點自動獲取和更新TLS證書。它甚至會固定OCSP響應。其新穎的證書管理功能是同類產品中最成熟、最可靠的。
用Go編寫的Caddy提供了比用c編寫的服務器更大的內存安全性。
文件服務器和代理
Caddy是一個靈活、高效的靜態文件服務器,也是一個強大的、可伸縮的反向代理。
使用它來為您的靜態站點提供壓縮、模板評估、Markdown呈現等服務。
或者將其用作任意數量后端的動態反向代理,包括主動和被動健康檢查、負載平衡、斷路、緩存等等。
下載和安裝
下載非常簡單:
wget "https://github.com/caddyserver/caddy/releases/latest/download/ASSET"
docker pull caddy
如果需要安裝為service,參考https://caddyserver.com/docs/install
零配置文件服務器
啟動當前目錄為文件服務器:
caddy file-server
啟動當前目錄為文件服務器,且支持https:
caddy file-server --domain example.com
方向代理:
caddy reverse-proxy --from example.com --to localhost:9000
使用mysite目錄:
caddy file-server --root ~/mysite
Caddy通過配置文件運行
啟動server,且支持https,反向代理,壓縮,和模板
example.com
# Templates give static sites some dynamic features
templates
# Compress responses according to Accept-Encoding headers
encode gzip zstd
# Make HTML file extension optional
try_files {path}.html {path}
# Send API requests to backend
reverse_proxy /api/* localhost:9005
# Serve everything else from the file system
file_server
caddy同一服務器支持多個域名
mysite.com {
root /www/mysite.com
}
sub.mysite.com {
root /www/sub.mysite.com
gzip
log ../access.log
}
參考
https://caddyserver.com/
https://github.com/caddyserver/caddy