所有功能
你可能想坐下來了解一下。

這種顏色 的功能是由可選外掛程式提供的。

概觀

Caddy 本質上是一個設定管理系統,可以執行各種應用程式,例如 HTTP 伺服器、TLS 憑證管理員、PKI 設施等等。它可以透過稱為設定模組的外掛程式進行擴充。

Caddy 擁有靈活且強大的 HTTP 反向代理、線上設定 API,以及強健且適合生產環境的靜態檔案伺服器,並預設透過自動 TLS 憑證在 HTTPS 上提供所有網站。

整體程式技術規格

語言

語言選擇對於網路伺服器至關重要。語言會影響開發速度和容易度、效能、測試、部署複雜性、生態系統可靠性、依賴性、工具、錯誤處理和可靠性,以及更多。Go 在所有這些領域都提供強大的優勢,允許快速開發、強健的生產效能和高擴充性。
Go

記憶體安全性保證

大多數伺服器(NGINX、Apache、HAProxy 等)及其依賴項都是用 C 編寫的,它們容易受到災難性的記憶體安全性漏洞(例如緩衝區溢位)的影響,例如 Heartbleed。像 Caddy 這樣的 Go 程式對一整類安全漏洞免疫。
強健

建置產出

Caddy 直接編譯成原生 CPU 指令。不需要解釋器;而且許多指令都經過架構最佳化。靜態二進位檔也更安全,因為沒有動態連結。
平台原生靜態二進位檔

執行時期依賴項

Caddy 是靜態編譯的。動態連結的應用程式在生產環境中很容易中斷,並且可能較不安全,因為共用可執行資源會從系統中的各個地方載入。一般來說,Caddy 二進位檔不一定需要外部函式庫,甚至連 libc 都不要。

編譯時間

在消費級硬體上,標準的 Caddy 建置只需幾秒鐘。這對於快速反覆運算、外掛程式開發和低成本部署至關重要。其他用 C/C++ 編寫的伺服器可能需要幾分鐘。
~30 秒冷建置,
~2 秒熱建置

部署環境

Caddy 幾乎可以部署在任何地方,並可以透過各種方式部署。一般來說,升級就像替換二進位檔一樣簡單。
  • 命令列介面
  • 系統服務
  • 容器
  • Kubernetes
  • 嵌入式

供應鏈和版本

Go 模組驗證我們的相依性完整性,而我們以密碼學方式簽署我們的版本成品,讓您知道可以信任什麼。
密碼學驗證

作業系統

Caddy 在 Go 編譯的所有主要平台上執行。
  • Linux
  • Windows
  • macOS
  • FreeBSD
  • OpenBSD
  • NetBSD
  • Android

微架構

在眾多 CPU 平台上以原生程式碼執行 Caddy。
  • x86 (i386, i686)
  • x86-64 (AMD64)
  • ARM
  • ARM 64 (AArch64)
  • MIPS
  • MIPS64[LE]
  • PPC64[LE]
  • RISCV64
  • S390X
  • Apple Silicon (Apple ARM;M1、M2 等)

正規表示法引擎

Caddy 的正規表示法語言 基於 Thompson NFA,在效能上優於其他網路伺服器所使用的 PCRE。它保證執行時間成本線性增加,而不是指數增加。在評估不可信輸入時,這是理想的。

RE2 語法

RE2

並行模型

Go 的執行時間以比作業系統更聰明的方式最佳化排定的 CPU 時間,使用稱為 goroutine 的輕量級使用者空間執行緒。Caddy 使用所有 CPU 核心,並輕鬆處理每秒數十萬個請求。
Goroutine (epoll + kqueue)

外掛程式模型

Caddy 可以透過編譯時間外掛程式進行擴充,這些外掛程式編譯為原生程式碼,在部署或系統升級期間不會中斷。由於沒有 IPC 或 RPC 呼叫,Caddy 擴充程式與原生程式碼一樣執行良好。
編譯時間靜態

高階功能

組態變更

透過零停機時間的優雅重新載入,可以在 Caddy 執行時變更其組態。它可編程/可編寫腳本,以進行強大的自動化。
  • RESTful HTTP API
  • 組態檔案
  • 安全的遠端存取

應用程式模組

頂層組態結構稱為應用程式模組或 Caddy 應用程式。它們提供 Caddy 大部分的功能。任何人都可以撰寫應用程式模組,而 Caddy 內建了幾個標準應用程式。
  • HTTP
  • TLS
  • PKI
  • 事件
  • 原始 TCP 和 UDP
  • SSH
  • PHP
  • 動態 DNS
  • 安全性
  • 處理程序監督
  • 剖析

日誌

所有 Caddy 模組都使用 Caddy 的集中式記錄設施。Caddy 的記錄可以設定為格式、詳細程度、輸出等。
  • 分級
  • 結構化
  • 高效率,零配置
  • 可擴充
  • 刪除、篩選、塗銷和審查欄位
  • IP 遮罩
  • 雜湊值
  • Regex 替換

儲存

資產和狀態(包括憑證和 OCSP 主訂書)儲存在可設定的儲存後端。事實上,設定為相同儲存的多個 Caddy 實例被視為叢集的一部分,並且可以自動協調。
  • 檔案系統
  • 內嵌(記憶體中)
  • Postgres
  • Redis
  • Vault
  • Consul

命令列介面

Caddy 的 CLI 不僅有用,而且有幫助。雖然大多數伺服器 CLI 僅執行處理程序並重新載入設定檔,但 Caddy 的 CLI 更進一步,幫助讓管理您的現代化網路伺服器變得輕鬆。

外掛程式可以註冊自己的子指令,以擴充 Caddy 的 CLI。

指令說明

如果您拼錯指令或旗標、遺漏引數或不知道子指令,將自動列印說明文字。您也可以使用 caddy help-h 存取整體指令說明或子指令說明。
內建,自動(也可以產生 man 頁面)

管理 API 包裝器

幾個子指令使用管理 API 端點,以與 CLI 搭配使用,幫助您執行常見的任務,例如從檔案載入設定檔或停止伺服器。
  • 將設定檔調整為 JSON
  • 啟動伺服器,選擇性地使用設定檔
  • 優雅地重新載入設定檔
  • 停止伺服器

二進制工具程式

由於 Caddy 的自訂建置很常見,因此有幾個指令可以幫助您管理和取得建置的詳細資訊。
  • 詳細建置元資料
  • 列出已安裝的設定檔模組
  • 列出相依性
  • 新增和移除外掛程式套件
  • 列印版本
  • 升級 Caddy 二進制檔

設定檔工具程式

如果您選擇使用設定檔,Caddy 的 CLI 可以幫助您管理它們。
  • 格式化 Caddyfile
  • 驗證設定檔
  • 列出相依性
  • 新增和移除外掛程式套件
  • 列印版本

模組工具程式

模組可以註冊自己的子指令,以提供可以在沒有設定檔文件的情況下使用的常見功能。
  • 靜態檔案伺服器
  • HTTP 反向代理
  • 靜態 HTTP 回應(可使用範本)
  • 儲存匯入/匯出(備份/還原)
  • 雜湊密碼,以與 HTTP 基本驗證搭配使用
  • 匯出檔案瀏覽範本

整合工具程式

幾個子指令可以幫助您將 Caddy 整合到您的 shell 環境中。
  • 產生 shell 完成指令碼
  • 列印環境
  • 產生 man 頁面
  • 將 Caddy 管理的根 CA 安裝到信任儲存區
  • 從信任儲存區移除 Caddy 管理的根 CA

系統訊號

Caddy 支援常見作業系統訊號/中斷,每個訊號/中斷的行為都有些微差異。

訊號文件

  • INT(優雅停止)
  • QUIT
  • TERM

結束代碼

無論 Caddy 是正常結束還是異常結束,結束代碼 都能提供提示,讓您的程序監督程式或腳本知道如何處理。

組態

我們設計 Caddy 的方式,讓它的組態不僅能存取功能,而且 本身就是一項功能

不再爭論哪一種組態檔案格式最好:使用您想要的格式!Caddy 的組態轉接器讓您可以使用您偏好的組態格式。

原生組態格式

Caddy 的原生組態格式無所不在:它在幾乎每個作業系統、平台、程式語言和 API 生態系統中都有工具。幾乎所有其他格式都可以轉換為 JSON,在人類可讀性和可程式化性之間取得平衡。您會發現它是您的網路伺服器的強大盟友。
JSON

組態轉接器

您始終可以用另一種格式撰寫您的組態,而且透過組態轉接器,Caddy 會自動將其轉換為 JSON,讓您可以使用您喜歡的方式工作。
  • Caddyfile
  • JSON 5
  • JSON-C
  • NGINX Conf
  • YAML
  • CUE
  • TOML
  • HCL
  • Dhall
  • MySQL

人性化的組態

Caddyfile 是大多數使用者最喜歡手動撰寫網路伺服器組態的方式,因為它的語法寬鬆,同時也設計了一個結構,讓它易於閱讀和撰寫。它會自動轉換為 JSON。
Caddyfile

匯出

Caddy 的管理 API 讓您能透過簡單的 GET 要求,在執行階段存取 JSON 格式的目前組態。

組態 API

Caddy 透過 API 端點接收其組態,該端點可以接受 JSON 或任何其他有組態轉接器的格式。

組態檔案

如果您偏好使用正常的 shell 指令來管理組態,Caddy 的 CLI 會為您包裝 API 端點。

自動 HTTPS

我們的旗艦功能,由 CertMagic 提供支援。Caddy 是第一個也是唯一一個預設啟用 HTTPS 的主要伺服器,並會自動取得和更新您所有網站的憑證。

完全原生、整合的自動 HTTPS 遠遠優於任何需要外部工具或 cron 工作的解決方案。Caddy 的憑證維護是業界最佳,因為它比任何其他解決方案都更健壯、更可靠、更具擴充性。Caddy 簡化您的基礎架構,而不是讓它複雜化。

當然,你可以嘗試使用 Certbot 和 cron 任務部署 100,000 個網站,但如果它沒有自行中斷,那麼網路伺服器就會中斷。只有 Caddy 被設計為可以水平和垂直地大規模擴充 TLS 憑證。

永遠不再手動產生 CSR。永遠不再按一下電子郵件中的連結下載憑證。永遠不再(錯誤)設定你的網路伺服器以使用它們。永遠不再忘記在憑證到期前幾個月逐一更新憑證。你甚至不必考慮憑證或 TLS。

它真的是全自動的。

合規性

Caddy 的 TLS 預設值在沒有任何額外設定的情況下是安全的,並且通過了各種產業的合規性測試。
  • 符合 PCI DSS
  • 符合 NIST
  • 符合 HIPAA
  • 產業最佳實務

隨選 TLS

提供不屬於你的網域服務?或者有很多網域?沒問題!只要幾行設定,隨選 TLS 就會在 TLS 交握期間動態取得憑證,將你的部署擴充到數萬個憑證。此功能是 Caddy 獨有的。

憑證發行者

以與它們相容的方式從任何發行機構取得憑證。憑證發行者取得 CSR 並傳回憑證資源。大多數網站只會使用 ACME 取得憑證。但 Caddy 也可以發行自己的自簽憑證以供內部使用、測試或開發。Caddy 的發行者來源是可插入的,因此 Caddy 可以自動化來自任何發行者模組的憑證。
  • ACME
  • 內部(自簽)
  • Microsoft Active Directory 憑證服務

憑證管理員

與取得 CSR 並傳回 Caddy 必須管理的憑證的發行者不同,憑證管理員是模組,可以隨選傳回始終有效的憑證;也就是說,它們為我們管理憑證。Caddy 可以使用 HTTP 端點或 Tailscale 以這種方式取得憑證,其他方式則可透過外掛程式取得。
  • HTTP
  • Tailscale

叢集協調

在所有設定為相同儲存的 Caddy 執行個體中,Caddy 會自動協調並在叢集中共用資源。這包括憑證操作和憑證本身、OCSP 釘選和會話票證金鑰。這會減少客戶端的延遲並提高可擴充性。
  • 取得和更新憑證
  • 載入現有憑證
  • OCSP 釘選
  • 會話票證金鑰 (STEK)

將 HTTP 重新導向到 HTTPS

預設情況下,HTTP 要求會重新導向到 HTTPS。
自動重新導向

OCSP

OCSP 指示何時撤銷憑證。伺服器應將 OCSP 回應釘選到憑證,以提供客戶端更好的安全性與隱私權。Caddy 是第一個也是唯一自動且預設執行此項操作的伺服器。它也會快取回應以應對 OCSP 回應器中斷,並在叢集中分享這些回應。如有需要,所有這些功能都可以停用。
自動 OCSP 釘選與快取

強制釘選

如果 CA 支援,Caddy 可以取得強制 OCSP 釘選的憑證。這可能會在撤銷時提供更高程度的安全性。

撤銷處理

已撤銷的憑證會自動替換。由於 Caddy 會釘選並更新 OCSP 回應,因此它可以偵測您的憑證是否已撤銷,如果已撤銷,它將替換 i

會話票證強化

如果攻擊者竊取加密會話票證的金鑰,TLS 連線便毫無意義。Caddy 已被 學術引用 為唯一定期輪替這些金鑰以限制攻擊時段的伺服器。
自動 STEK 輪替

金鑰類型

您可以自訂用於憑證的金鑰類型。
  • Ed25519
  • ECDSA P256
  • ECDSA P384
  • RSA 2048
  • RSA 4096

憑證有效期

大多數 ACME 客戶端假設為 90 天憑證,或不預期憑證短於 7 天。Caddy 可以成功管理有效期為數小時和數分鐘的憑證。

Caddy 計算相對於每個憑證的壽命,稱為「更新時段比率」,而不是硬編碼在更新前的一定時間。預設情況下,Caddy 在憑證可用壽命的 2/3 後更新憑證。此比率適用於大多數有效期,但可以調整。

任何有效期

智慧型錯誤處理

如果 Caddy 無法取得憑證,錯誤將記錄下來,Caddy 將以指數方式遞減並持續重試,直到成功為止(通常長達 30 天,但可能會更長)。Caddy 會盡一切合理努力讓您的憑證保持更新。
指數遞減

內建節流

Caddy 符合最佳實務,不會以憑證請求轟炸 CA;相反地,每個訂單都經過仔細計時,以避免壓垮 CA 伺服器。

ACME

Caddy 的 ACME 客戶端是同類產品中的佼佼者,比現今任何其他整合式 ACME 客戶端都更可靠,且擁有更多實務經驗。Caddy 自從 Let's Encrypt 公開發行前就開始使用 ACME,而且 Caddy 與任何相容於 ACME 的 CA 都能搭配使用。

相容性

有些 ACME 客戶端僅針對 Let's Encrypt 進行測試。Caddy 保證與所有支援 ACME 的 CA 相容。
所有符合 RFC 8555 的憑證授權單位,例如
  • Let's Encrypt
  • ZeroSSL
  • Google 信任服務
  • BuyPass
  • DigiCert
  • GlobalSign
  • SSL.com
  • Smallstep

測試端點

預設情況下,在嘗試取得憑證失敗後,Caddy 會退回到 CA 的測試或暫存端點(如果有的話),以避免達到 CA 強制執行的生產速率限制。這也可能是您專門為驗證 DNS 組態而設定的 ACME 伺服器。
Let's Encrypt(其他可設定)

外部帳戶繫結

選擇性設定外部帳戶繫結 (EAB),讓 Caddy 能與要求您擁有個別帳戶的 CA 合作。

挑戰類型

Caddy 支援 Web PKI 的所有主要 ACME 挑戰類型,也可以擴充支援其他類型。
  • HTTP-01
  • TLS-ALPN-01
  • DNS-01

備用挑戰埠

雖然某些 ACME 挑戰必須使用標準埠 80 和 443,但如果您透過路由器轉發這些埠,Caddy 支援在備用埠上監聽這些埠。
  • HTTP(預設 80)
  • TLS-ALPN(預設 443)

智慧挑戰選取

Caddy 會了解最有可能成功的挑戰類型,並優先嘗試那些類型。例如,如果埠 80 被封鎖,它會學著優先使用 TLS-ALPN 挑戰,因為它不使用埠 80。

DNS 挑戰整合

DNS 挑戰是唯一不需要 CA 能夠存取您的伺服器的挑戰。透過 libdns 解決數十個 DNS 提供商的 DNS 挑戰整合。此清單不完整;查看 DNS 提供商完整清單
  • ACME-DNS
  • AliDNS
  • Cloudflare
  • DigitalOcean
  • DNSPod
  • DuckDNS
  • DynDNS
  • EasyDNS
  • Gandi
  • GoDaddy
  • Google Cloud DNS
  • Hetzner
  • Linode
  • Name.com
  • Namecheap
  • Namesilo
  • Netlify
  • OVH
  • Porkbun
  • PowerDNS
  • RFC 2136
  • Route 53
  • Scaleway
  • Vercel
  • Vultr
  • 查看全部...

受信任的 CA 憑證

選擇性設定與您選擇的 CA 互動時您信任的根憑證;這有助於在沒有公開 CA 的情況下建立信任的內部 PKI。

優先鏈

當 CA 提供多個憑證鏈時,Caddy 讓您能夠自訂要下載和使用的憑證鏈。
  • 最小
  • 根的通用名稱
  • 任何通用名稱

HTTP 伺服器

Caddy 的 HTTP 伺服器獨一無二:強大、可擴充、高效且現代化。

HTTP 版本

Caddy 的 HTTP 伺服器支援所有主要版本的 HTTP,並預設啟用(除了不安全的 H2C,但可用)。您可以自訂要提供的確切版本。
  • HTTP/1.1
  • HTTP/2
  • 明文傳輸的 HTTP/2 (H2C)
  • HTTP/3

HTTPS

Caddy 的旗艦功能是自動且預設啟用 HTTPS。您可以控制其運作方式或停用某些面向:HTTP 重新導向、憑證管理、特定主機名稱等。
自動

監聽介面

每個 HTTP 伺服器可以繫結到一個或多個 Socket 和網路介面。對於埠,您可以指定特定主機介面或僅使用埠的所有介面。所有類型的 Unix Socket 也都受支援。
  • TCP
  • UDP
  • Unix Socket

監聽器封裝器

監聽器可以由在連線接受層級運作的模組封裝。
  • 在 HTTPS 埠上重新導向 HTTP
  • PROXY 協定
  • Tailscale

逾時

設定逾時是生產環境中重要的防禦措施,但必須仔細調整以容納下載或上傳大量資料的合法慢速用戶端。
  • 讀取逾時
  • 讀取 HTTP 標頭逾時
  • 寫入逾時
  • 閒置逾時
  • TCP 保持連線間隔

全雙工通訊

並非所有用戶端都支援 HTTP/1 的並發讀寫,但可以為需要它的特定用戶端和應用程式啟用。
  • 可設定為 HTTP/1
  • HTTP/2 的預設值

錯誤處理

Caddy 讓您完全控制錯誤處理,以提供用戶端最佳/所需的體驗。
自訂錯誤路由

TLS 終止

使用明智的預設值終止 TLS(以前稱為「SSL」),您可以自訂這些預設值以精細控制 TLS 交握。您可以根據各種因素(例如伺服器名稱 (SNI) 或遠端 IP)將政策指派給用戶端。
  • TLS 1.2
  • TLS 1.3
  • 用戶端驗證(TLS 互惠驗證;mTLS)
  • 用戶端驗證模式:要求、需要、如果已提供則驗證、需要且驗證
  • 加密套件
  • 曲線
  • ALPN
  • 限制協定版本
  • 預設 SNI
  • 備用 SNI

跨網站安全性

Caddy 通常在同一個 socket 上提供多個網站,因此 Caddy 會自動啟用防護措施,以確保您的網站安全,只要其中任何一個網站啟用 TLS 客戶端驗證即可。
驗證 TLS ServerName 和 HTTP Host 標頭是否相符

存取日誌

啟用零配置、結構化的存取日誌,以徹底了解客戶端要求和回應。使用 Caddy 內建的記錄設定或第三方模組進行自訂。
  • 比常見日誌格式 (CLF) 更實用
  • 要求標頭(敏感欄位除外)
  • 回應標頭
  • 遠端 IP
  • 延遲

可觀察性

您的網路伺服器可以使用相容於標準的指標進行監控。
Prometheus 指標、開放遙測

要求處理

HTTP 伺服器使用自訂路由處理要求,這些路由包含您定義順序中特定的處理常式。可定義個別的錯誤路由,以進行自訂錯誤處理。您在 HTTP 處理方面有高度的彈性。請參閱下方可用的 HTTP 處理常式模組。
可組合路由(和個別的錯誤處理路由)

要求篩選器

僅使用比對器套用處理常式到特定要求,比對器會根據各種屬性對要求進行分類。比對器也用於篩選。它們是可延伸且可插入的,因此您的路由可以有多麼具體和自訂沒有限制!有些比對器支援正規表示式。所有比對器都很快。而且比對器可以組合成組,因此它們可以使用 AND、OR 和 NOT 邏輯連結。
  • 主機
  • 路徑
  • 方法
  • 標頭
  • 協定
  • 遠端 IP
  • 任意 CEL 表達式
  • 檔案(存在、大小、修改日期)
  • HTTP 路由變數
  • 邏輯 NOT
  • 地理位置
  • 遠端主機

HTTP 處理常式

處理常式是模組,可以組合在一起,以完全按照您想要的方式處理傳入要求。處理常式模組與 Caddy 的其他部分一樣,是可延伸且可插入的。我們無法在此列出所有處理常式。

實際上,處理常式會與比對器配對,比對器會根據各種屬性(例如路徑、標頭、查詢字串、方法等)篩選或分類要求。這讓您可以選擇性地將任何和所有這些處理常式套用到特定要求。

ACME 伺服器

Caddy 內建一個可立即使用的 ACME 伺服器,非常適合您的內部 PKI。輕鬆自動化基礎架構中的 mTLS 憑證。由 Smallstep 函式庫提供支援。

Authelia

使用 Authelia 透過驗證保護路由。

驗證

使用可擴充驗證模組驗證使用者。此處理常式由驗證提供者擴充,如果使用者無法透過任何已設定的提供者驗證,則會傳回錯誤。HTTP 基本驗證包含標準,而且與其他伺服器不同,在設定基本驗證時會對密碼進行雜湊處理(因為它基本上是密碼資料庫),增強安全性。
  • HTTP 基本驗證
  • JWT
  • Discord
  • 表單
  • SAML

進階驗證

caddy-security 模組提供一整套驗證和授權功能,提供各種強大的驗證解決方案。
  • 基於表單
  • 本機
  • 基本
  • LDAP
  • OpenID Connect
  • OAuth 2
  • SAML

快取

輕鬆啟用快取,以服務更多客戶端並提升效能。此快取模組符合 RFC 7234,並支援基於標籤的快取清除、分散式和本機儲存、金鑰產生調整等功能。支援多個後端!
  • Badger
  • Etcd
  • NutsDB
  • Olric
  • Redis

編碼

使用可插入編碼模組即時壓縮、編碼或以其他方式轉換 HTTP 回應。壓縮回應就像一行設定一樣容易,而且編碼不會套用在已經採用壓縮格式或太小而無法產生效益的回應上。
  • Gzip
  • Zstandard (zstd)
  • Brotli

檔案伺服器

功能強大、彈性且有效率的靜態檔案伺服器,如下所述。

Go 套件虛榮路徑

一個簡單的處理常式,用於實作 Go 套件的虛榮匯入路徑。

gRPC-Web 橋接

將 gRPC-Web 要求橋接/轉換成 gRPC,以供您的後端應用程式使用。

標頭處理

修改 HTTP 要求和回應標頭。在標頭欄位中新增、設定、刪除和取代子字串的速度很快,但正規表示式也支援進階使用。回應標頭處理可以延遲到回應開始寫入時才執行,甚至可以根據回應狀態碼或標頭值設定條件。
  • 新增
  • 設定(覆寫)
  • 刪除
  • 子字串取代

影像過濾

即時調整影像。
  • 裁切
  • 調整大小
  • 翻轉
  • 縮放
  • 旋轉
  • 銳化

地圖

根據輸入值指定變數/佔位符值;類似於查詢表。

Mercure

讓您的 Caddy 執行個體成為 Mercure 集線器:一種開放、簡單、快速、可靠且省電的即時通訊解決方案。

指標

公開 /metrics 端點,以供與相容於 Prometheus 的系統和其他監控工具搭配使用。

HTTP/2 伺服器推送

在使用 HTTP/2 時,在客戶端要求之前主動將資源推送到客戶端。(瀏覽器可能會將其標示為已過時,但 Caddy 仍有有效的實作,在某些應用程式中很有用。)

速率限制

進階的企業級速率限制器,使用環狀緩衝區和滑動視窗演算法實作,可根據區域金鑰大量調整規模。設定一組 Caddy 執行個體,並使用相同的儲存空間,以在您的機群中分配速率限制。與其他企業伺服器不同,不需要記憶體限制。
  • 本機或分散式
  • 多個區域
  • 緩衝區合併
  • 僅 1 個 goroutine
  • 可設定 O(Kn) 記憶體管理
  • 透過重新載入保留狀態
  • 設定 Retry-After 標頭
  • 可選抖動
  • 高度可程式化

要求主體控制

透過拒絕過大的要求,限制要求主體的大小。

反向代理

Caddy 有一個世界級的反向代理,在以下部分中有詳細說明。

改寫要求

在繼續處理要求之前,對要求進行內部變更。這對於接受需要變更才能符合後續預期的要求很有用。可以變更要求的各個面向,例如方法和 URI。
  • 方法
  • URI(路徑、查詢字串)
  • 移除路徑字首或字尾
  • 正規表示式支援
  • 智慧型 URL 編碼和斜線處理

靜態回應

將靜態回應硬編碼到您的設定檔中,並具備設定狀態碼、標頭欄位和主體的能力。(這通常用於回應 HTTP 重新導向。)然後可以正常關閉連線,或在需要時強制中止連線。

子路由

將處理常式分組成「子路由」,將多個處理常式視為一個處理常式,讓某些邏輯更容易理解。

範本

回應可以評估為範本,讓您能夠將代理或靜態內容轉換為豐富的動態內容,其中包含變數、if 陳述式、標記渲染(支援前置事項)等。

追蹤

使用 OpenTelemetry 支援分散式追蹤。

變數

讀取和寫入變數,可以在您處理要求時內部使用這些變數。

WebDAV

使用一或兩行設定成為 WebDAV 伺服器。相容於大多數 WebDAV 應用程式。

反向代理

Caddy 擁有世界上最靈活的通用反向代理,具備進階的請求和回應處理、動態路由、健康檢查、負載平衡、電路中斷等功能。

Caddy 的代理獨特之處在於其設計。只有代理程式面向客戶端的一面需要是 HTTP;與後端之間的往返傳輸所使用的傳輸協定可以是任何協定!

此外,我們的代理程式可以使用高度動態的上游進行編程。也就是說,可用的上游可以在進行中的請求期間變更!如果沒有可用後端,Caddy 可以保留請求,直到出現可用後端為止。

高階代理功能

傳輸

傳輸是 Caddy 從後端取得回應的方式。Caddy 的代理程式可以使用替代傳輸模組,作為 HTTP 以外其他協定的前端。這讓 Caddy 能夠從甚至不使用 HTTP 的後端產生 HTTP 回應!
  • HTTP
  • FastCGI
  • NTLM

負載平衡

選擇上游是任何現代反向代理的重要功能。Caddy 內建多種負載平衡政策,可供選擇以符合任何生產服務。有些政策極快且輕量級;有些則根據客戶端或請求的屬性提供上游親和性;有些則透過計算連線數或使用隨機性和權重來努力達成平均分配。
  • 隨機
  • 隨機選擇 N
  • 最少連線數
  • 循環
  • 加權循環
  • 第一個可用
  • 遠端 IP 雜湊
  • 客戶端 IP 雜湊
  • URI 雜湊
  • 查詢雜湊
  • 標頭雜湊
  • Cookie 雜湊

電路中斷

電路中斷模組可以在後端實際中斷之前暫時將其標記為中斷,以保持其正常運作。
基於延遲

健康檢查

健康檢查會偵測上游何時不可用。被動健康檢查會從實際請求推斷狀態。主動健康檢查會在背景中運作,與客戶端請求無關。
  • 主動
  • 被動

可觀察性

管理員 API 公開一個端點,用於擷取代理程式上游的流量計數和健康狀態。

上游來源

Caddy 可以透過各種方式取得上游清單。最常見的方式是將它們寫入組態(靜態)。其他方式是動態的,透過此方式,會針對每個要求傳回上游清單(這些方式利用可組態快取來提升效能)。
  • 靜態
  • 動態:A 記錄
  • 動態:SRV 記錄
  • 動態:結合多個來源

重試

要求可以重試,直到後端可用來成功處理要求。在此期間,甚至可以在要求仍待處理時更新上游清單!

串流

回應可以直接串流到用戶端,或為了獲得更好的線路效能,稍作緩衝並定期清除。

受信任的代理

為了使用與代理相關的標頭,例如 X-Forwarded-For,您可以指定您信任的代理 IP 範圍清單。預設情況下,Caddy 不信任用戶端。

標頭處理

標頭可以在傳送至後端的請求中修改,也可以在從後端傳回的回應中修改。這類似於一般 HTTP 伺服器的標頭處理常式,但這是套用於代理時。
  • 新增
  • 設定(覆寫)
  • 刪除
  • 子字串取代

緩衝

代理可以選擇在清除之前讀取整個主體。這會使用更多記憶體,但在某些情況下後端應用程式或用戶端可能會需要。
  • 要求
  • 回應

要求重寫

重寫與代理是不同的考量,通常會分開處理,但有時您需要使用來自代理的資訊(例如所選的上游)來重寫要求。Caddy 的代理讓您可以執行此操作。

回應攔截

預設情況下,Caddy 的代理僅將回應寫入用戶端。但是,您可以攔截上游的回應並以其他方式處理它。這包括只比對特定回應,並呼叫您指定的自訂處理常式鏈。

主動健康檢查

主動健康檢查假設後端預設為停機狀態,直到健康檢查確認為否。

HTTP 要求參數

主動健康檢查會針對上游的 HTTP 端點執行。您可以自訂這些 HTTP 要求的參數,以符合您的需求。
  • 路徑和查詢字串
  • 標頭

時機

您可以自訂執行主動健康檢查的間隔。

成功準則

每個主動健康檢查都可以自訂一組準則,以判定健康或不健康的狀態。
  • 回應逾時
  • HTTP 狀態碼
  • 主體的正規表達式比對

故障安全性

遇到錯誤和困難的後端有時可能會回應異常大的回應主體。Caddy 讓您可以限制這個,以保留代理資源。
限制回應大小

被動健康檢查

被動健康檢查假設後端預設為正常,直到在代理請求過程中符合故障準則。

故障準則

所有被動健康檢查都會計算連線故障。此外,您可以在請求期間設定更多準則,以判定後端是否健康。
  • 同時請求限制超過
  • HTTP 狀態
  • 延遲

故障記憶體

您可以自訂記住故障的時間長度,以及需要多少故障記憶體才能視後端為停機。

HTTP 傳輸

這是預設的傳輸模組。它建立一個代理的 HTTP 請求,以從後端取得 HTTP 回應。

DNS 解析器

系統解析器預設使用,但您可以為每個代理處理程式指定自訂 DNS 解析器。

TLS

Caddy 可以設定為支援上游的 TLS(以前稱為 SSL)。
  • 自訂根 CA 池
  • 後端的客戶端驗證
  • 自訂握手逾時
  • 伺服器名稱指示器 (SNI)
  • 重新協商層級
  • 從 TLS 中豁免特定埠

連線池

後端的連線會集中到池中,以達到最大的效率和最小的延遲。
  • HTTP 保持連線
  • 自訂探測間隔
  • 最大閒置連線(總計和每個主機)
  • 閒置連線逾時

壓縮

Caddy 可以壓縮後端往返請求。
Gzip

連線限制

您可以限制每個主機的連線數。

PROXY 協定

連線到上游時,同時支援 PROXY 協定 v1 和 v2。

逾時

可以設定各種逾時;有些有合理的預設值。
  • 連線(撥號)
  • RFC 6555 回退
  • 讀取回應標頭
  • 預期繼續
  • 讀取
  • 寫入

自訂緩衝區大小

如果您發現您的應用程式在特定設定下執行得更好,請調整讀寫緩衝區的大小。
  • 讀取緩衝區
  • 寫入緩衝區

HTTP 版本

Caddy 的代理程式支援與後端的多種 HTTP 版本。預設支援 HTTP/1.1 與 HTTP/2。
  • HTTP/1.1
  • HTTP/2
  • H2C(明文 HTTP/2)

FastCGI 傳輸

FastCGI 通常用於透過 php-fpm 提供 PHP 應用程式服務。FastCGI 回應器可能需要有關執行中腳本的其他資訊,例如腳本名稱、相對於根目錄的路徑等,而 Caddy 的 FastCGI 傳輸會處理所有這些資訊,並使其可設定。

高效率

Caddy 的 FastCGI 程式碼實作經過最佳化,可與使用 C 編寫的記憶體不安全程式碼匹敵,有時甚至超越其效能。

路徑分割

路徑通常會在副檔名處分割,以計算適當的 PATH_INFO 變數。

解析根目錄符號連結

選擇性地要求宣告為符號連結的路徑在符號連結變更後更新,而無需重新啟動 php-fpm。

環境變數

從父環境讀取,並為 CGI 腳本設定自訂環境變數。

逾時

設定逾時以節省資源。
  • 撥接(連線)
  • 讀取
  • 寫入

擷取 stderr

Caddy 可以擷取上游的 stderr 輸出並記錄下來以供查看。

靜態檔案伺服器

Caddy 的檔案伺服器是為網站提供靜態檔案服務的首選方式。

很簡單:指定一個要提供檔案服務的根目錄,然後每個請求路徑會自動附加到根目錄以取得要提供服務的檔案的完整路徑。

核心加速

Caddy 只要有可能就會繞過使用者空間緩衝區,以大幅加快檔案下載速度。
sendfile

虛擬檔案系統

預設情況下,Caddy 會從您在本地磁碟上指定的目錄提供檔案服務,但這個檔案存取是可插入的,可以由任何虛擬化檔案系統模組取代。這讓您可以從任何檔案儲存裝置提供靜態檔案服務,例如資料庫、雲端儲存,甚至直接嵌入在網路伺服器二進位檔中的資產!
  • 本地磁碟
  • 嵌入式資產
  • Amazon AWS S3

預先壓縮的檔案

如果您的部署管線會壓縮網站資源,Caddy 可以自動偵測它們,並以「預先壓縮」編碼提供服務,以提高效率和增加傳輸量。
  • Gzip
  • Brotli
  • Zstandard

隱藏檔案和資料夾

主動隱藏網站根目錄中可能存在的敏感檔案和資料夾,以提高安全性。您可以指定個別檔案/資料夾路徑、不論路徑為何的檔案名稱,或使用 glob 比對來隱藏具有特定模式的檔案/資料夾。
精確路徑、檔案名稱、glob 比對

索引檔名

索引檔案是當客戶端要求目錄時提供服務的檔案。可自訂要尋找的索引檔案檔名。如果在要求的目錄中找不到索引檔案,可以選擇性地啟用目錄瀏覽。
index.html、index.txt(可自訂)

有條件的要求

支援 Etag、Last-Modified 和相關標頭。
  • Etag
  • Last-Modified
  • If-Match
  • If-None-Match
  • If-Modified-Since
  • If-Unmodified-Since
  • If-Range

範圍要求

對於串流大檔案和繼續下載來說很常見,要求特定檔案範圍的客戶端不會失望或驚訝。Caddy 適當地處理具有範圍標頭的 HTTP 要求。

標準路徑

一般來說,單一檔案或目錄有多個 URI。例如:/、/index.html 和 /index.html/ 代表相同的資源。Caddy 使用 HTTP 重新導向來強制執行路徑正規化(移除檔案中的尾隨斜線,並將其新增至目錄)。

直通模式

有時你只想在檔案存在時提供服務,否則繼續使用鏈中的下一個處理常式,而不是傳回錯誤給客戶端。

檔案瀏覽器

Caddy 的檔案伺服器透過其現代檔案瀏覽器而活躍起來,在行動裝置和桌上型電腦上看起來都很吸引人。它具有比任何其他標準 HTTP 檔案伺服器更多的功能和實用性!

資料夾清單

當資料夾中不存在索引檔案(如下)時,顯示資料夾中的檔案清單。
精確路徑、檔案名稱、glob 比對

日夜主題

色彩配置會自動調整以符合系統主題,無論是淺色或深色,以避免讓你眼花撩亂或難以閱讀。
  • 淺色模式
  • 深色模式

依欄位排序

使用黏著欄位排序,快速整理每個目錄的資訊並更快地找到項目。
  • 檔案/目錄
  • 名稱
  • 大小
  • 修改日期

篩選

每次載入頁面都會自動將游標焦點放在搜尋方塊上,因此你可以開始輸入檔名並立即篩選大型清單。

版面配置

檔案可以根據您要如何檢視清單以不同的版面顯示。例如,網格檢視非常適合用於圖庫。
  • 清單
  • 網格

回應式設計

頁面寬度會流暢調整以適應各種尺寸的螢幕。連結大小足夠大,可以在觸控螢幕上輕鬆點選,同時資訊密度也足夠高,具有實用性。

JSON API

具有 Accept-Encoding: application/json 標頭的請求將以 JSON 負載回覆,以透過程式或指令碼存取您的檔案清單。

可自訂的清單範本

如果預設範本不適用或您想要增添趣味,請自訂瀏覽範本,讓外觀和作用符合您的任何需求!

檔案大小視覺化

檔案大小會以其後方長條的長度表示,讓您快速輕鬆地找出異常的大或小檔案,或一眼比較相對大小。

檔案類型圖示

檔案伺服器會辨識數十種常見的檔案類型,並顯示相關聯的圖示,讓您在掃描頁面時更容易辨識。

Caddy 是一個擁有大量功能的活躍專案。此頁面還不是 Caddy 提供的所有功能和好處的完整清單,因為有太多可以提到的。我們歡迎在 GitHub 上提供 貢獻