開源專案
caddyserver/caddy avatar
caddyserver/caddy

Caddy:一個預設啟用自動 HTTPS 的可擴展伺服器平台

具有自動 HTTPS 功能的快速且可擴展的多平台 HTTP/1-2-3 Web 伺服器

75,760 個 Star4,962 個 ForkGoApache-2.0

秒懂

它是什麼?
Caddy 倉庫是一個基於 Go 的 Web 伺服器,預設啟用 TLS。本文基於 README 回顧其設定選項、建置要求和專案背景。
適合誰用?
README 將 Caddy 描述為一個預設啟用 TLS、可擴展、採用單一設定文件設計和插件架構的平台。其建置過程需要 Go 1.25 或更高版本,設定可透過 JSON、Caddyfile 或介接器處理。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 1 天前。
用什麼語言寫的?
主要是 Go(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

預設啟用 TLS 的伺服器平台

倉庫的開頭將 Caddy 稱為「一個預設使用 TLS 的可擴展伺服器平台」。README 的標題是「每個網站都啟用 HTTPS」。列出的功能包括:針對公開名稱的 ZeroSSL 和 Let's Encrypt 自動 HTTPS,針對內部名稱和 IP 的完全託管本機 CA,與叢集中其他 Caddy 執行個體的協調,多簽發者回退,以及 Encrypted ClientHello 支援。README 聲稱,當其他伺服器因 TLS/OCSP/憑證相關問題而當機時,Caddy 仍能保持運行,並且已處理數兆次請求、管理數百萬個 TLS 憑證。它還表示預設支援 HTTP/1.1、HTTP/2 和 HTTP/3,且伺服器無需任何外部依賴(甚至不需要 libc)即可在任何地方運行,並且使用 Go 編寫。這些是 README 中的聲明,並非獨立測量結果;README 沒有提供基準數據或安全稽核連結。

設定:Caddyfile、JSON 和 API

README 介紹了多種設定 Caddy 的方式。其原生設定語言是 JSON,JSON API 被描述為主要設定方式,支援動態設定變更。Caddyfile 是更簡單的替代方案,設定介接器可以將其他格式(包括 JSON5、YAML、TOML,甚至 NGINX 設定)轉換為 JSON。CLI 也支援設定檔。README 強調,幾乎所有設定都包含在單一設定文件中,而不是分散在 CLI 旗標、環境變數和單獨的檔案中。它表示這使伺服器設定管理更加直接,並減少了隱藏變數。文件站點是完整結構的參考;README 本身不包含設定範例。

從原始碼建置和 Go 版本要求

根據 README,從原始碼建置需要 Go 1.25.0 或更高版本。對於開發,步驟是複製倉庫,切換到 `cmd/caddy/` 目錄,然後執行 `go build`。README 警告說這種方法不會嵌入正確的版本資訊,並建議使用 `xcaddy` 建置器來取得版本資訊和插件。`xcaddy build` 命令自動完成建立新模組、新增插件匯入和使用特定標籤編譯的步驟。在 Linux 上,繫結低連接埠可能需要提升權限;README 建議使用 `sudo setcap cap_net_bind_service=+ep ./caddy`。對於使用 `go run` 的使用者,有一個 `setcap.sh` 指令碼可用於 `-exec` 旗標。測試可以執行 `go test ./...` 或針對特定模組,如 `./modules/caddyhttp/tracing/`。README 沒有提及二進位大小或支援的作業系統清單;它只聲稱 Caddy 可以在沒有任何外部依賴的情況下在任何地方運行。

概述中描述的架構

概述部分將 Caddy 描述為最常作為 HTTPS 伺服器使用,但它表示 Caddy 適用於任何長期運行的 Go 程式。它是一個執行 Go 應用程式的平台:Caddy 的「應用」是作為 Caddy 模組實現的 Go 程式。README 表示標準附帶兩個應用:`tls` 和 `http`。這些應用立即受益於自動化文件、透過 API 進行的優雅線上設定變更,以及與其他 Caddy 應用的統一。README 還聲稱與其他 Web 伺服器相比具有「前所未有的控制水平」,並表示插件系統「極其可擴展」。它強調幾乎所有設定都位於單一設定文件中,這使伺服器管理更加直接。完整的設定結構在 Caddy 網站上有文件;README 不包含範例。

取得幫助和社群模式

README 指向 Caddy 網站取得完整文件,地址為 https://caddyserver.com/docs/。文件本身是開源的,託管在 GitHub 上的 caddyserver/website 倉庫中。對於幫助,README 建議使用 Caddy 的公司透過 Ardan Labs 預先簽訂支援合約。個人可以在 caddy.community 社群論壇上免費交換幫助,並指出幫助是出於業餘時間和善意提供的。贊助者可以獲得私人幫助。問題追蹤器僅用於 bug 報告和功能請求;支援問題會被轉介到論壇。README 沒有提及回應時間、可用性保證,或除這些管道之外的正規支援流程。

專案歷史、商標和授權

Matthew Holt 於 2014 年在楊百翰大學學習電腦科學時開始開發 Caddy。選擇「Caddy」這個名字是因為該軟體有助於處理提供 Web 服務的繁瑣、平凡任務,並且是一個多功能的單一場所。根據 README,Caddy 成為第一個自動且預設使用 HTTPS 的 Web 伺服器。該專案現在有數百名貢獻者,並已處理數兆次 HTTPS 請求。「Caddy」是 Stack Holdings GmbH 的註冊商標,該專案是 ZeroSSL(HID Global 旗下公司)的一個專案。倉庫使用 Apache-2.0 授權,該授權授予永久的、全球性的、非排他性的、免費的、免版稅且不可撤銷的版權許可,以複製、準備衍生作品、公開展示、表演、再許可和分發該作品。授權摘錄不提供超出完整 Apache 2.0 文字所陳述內容的保證、支援或責任條款。

針對 caddyserver-caddy,閱讀 README 時應把安裝入口和日常使用入口分開看。先確認文件點名的執行檔、套件管理器或容器命令,再對照專案要求的作業系統、執行時版本與外部服務。這些前置條件會直接決定首次啟動能否成功,不能用其他專案的慣例代替。

配置層面的重點在於找出 caddyserver-caddy 真正讀取的檔案與參數。若 README 提到環境變數、設定檔、資料目錄、插件或 provider,就應逐一記錄其名稱和預設值,並觀察啟動後產生的日誌與輸出。文檔沒有交代的默認行為,應視為未知,尤其不能自行推定安全性、持久化或相容性。

從維護角度看,caddyserver-caddy 的功能清單不等於完整的營運承諾。需要實際檢查 README 列出的版本、依賴、資料格式和錯誤處理,確認升級時哪些狀態會被保留,哪些整合需要額外憑證。若要放入團隊流程,還要先確認其授權文字對分發、修改和商業使用的具體限制。

最小驗證可以沿用 caddyserver-caddy 自己提供的命令與檔案:在乾淨目錄建立最小設定,執行文件中的初始化或啟動命令,再查看 README 指定的輸出、狀態頁、產物或日誌。測試至少涵蓋一次成功流程與一次缺少必要參數的失敗流程,這樣才能分辨功能存在與實際可操作之間的差距。

caddyserver-caddy 的實際價值還取決於它如何處理日常變更。可以先改動一個 README 明確列出的選項,觀察重載、重新建置、快取失效或資料更新是否符合說明,再恢復原設定確認狀態沒有留下難以察覺的副作用。對需要網路、資料庫、瀏覽器或模型服務的專案,這個步驟也能把程式本身的問題與外部依賴故障區分開。

若 caddyserver-caddy 要交給其他人使用,交接內容不能只包含安裝命令。還要記下入口命令的完整參數、需要提交的設定檔、敏感值的存放位置、失敗時應查看的日誌,以及 README 明確列出的不支援情況。這些資訊會影響排障時間,也能避免使用者把社群版、實驗性功能或本地限定能力誤當成穩定服務。

在 caddyserver-caddy 的評估中,輸入與輸出的可追蹤性比功能數量更值得核對。保留一次命令執行的參數、產生的檔案名稱和關鍵日誌,才能在重跑時知道差異來自設定、依賴還是資料。若 README 沒有給出某項能力的介面或結果格式,文章只把它列為未說明,不替專案補上承諾。

部署 caddyserver-caddy 前也要核對資源與權限邊界。把 README 寫明的資料庫、網路、檔案系統和第三方帳號需求列成清單,逐項確認最小權限是否足夠,並把失敗時的返回值與日誌保存下來。這樣才能判斷它適合個人試用、團隊內部流程,還是需要更完整的運維審查。

採用前可在 caddyserver-caddy 的工作目錄執行 README 所列入口,逐項核對輸入、產物與錯誤訊息;文檔沒有承諾的行為不應當作既定能力。

編輯結論

README 將 Caddy 描述為一個預設啟用 TLS、可擴展、採用單一設定文件設計和插件架構的平台。其建置過程需要 Go 1.25 或更高版本,設定可透過 JSON、Caddyfile 或介接器處理。授權為 Apache-2.0,該專案是 ZeroSSL 的一項倡議。 對這個專案的判斷應以 README 中的實際入口為準:先按文件執行專案命令,再檢查產生的設定、服務狀態或輸出是否符合預期;若核心依賴、平台條件或文件未涵蓋的部署細節不合適,就不應只因功能清單完整而採用。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記