簡介
Caddy服務(wù)器(或稱Caddy Web)是一個(gè)開源的,使用 Golang 編寫,支持 HTTP/2 的 Web 服務(wù)端。它使用 Golang 標(biāo)準(zhǔn)庫提供 HTTP 功能。
Caddy 一個(gè)顯著的特性是默認(rèn)啟用 HTTPS。它是第一個(gè)無需額外配置即可提供 HTTPS 特性的 Web 服務(wù)器。
作者 Matt Holt 于 2014 年 12 月開始開發(fā) Caddy ,并于 2015 年 4 月發(fā)布第一個(gè)版本。在發(fā)布后的一年里,它的下載量超過了 20000 次,并在 GitHub 上獲得了 4500 個(gè) Star。
Caddy 支持各種 Web 技術(shù),提供靜態(tài)編譯的二進(jìn)制文件,支持 i386、amd64 和 ARM 架構(gòu)上的 Windows、Mac、Linux、Android 和 BSD 操作系統(tǒng)。
相比于傳統(tǒng)的 Web 服務(wù)器(如 Nginx、Apache),Caddy 的目標(biāo)是通過更簡潔的配置、更智能的功能來減少人為出錯(cuò)的可能性,并提升部署效率。
支持 API 和配置文件兩種方式:
您可以在同一臺(tái)服務(wù)器上同時(shí)使用 API 和配置文件,但我們不建議這樣做:最好有一個(gè)真相來源。
Caddyfile的結(jié)構(gòu)

要點(diǎn)
? 一個(gè)可選的 全局選項(xiàng)塊 可以是文件中第一個(gè)內(nèi)容。
? 代碼段 或 命名路由 可以選擇性地出現(xiàn)在下一個(gè)位置。
? 否則,Caddyfile 的第一行始終是將要服務(wù)的站點(diǎn)的 地址。
? 所有 指令 和 匹配器 必須放在站點(diǎn)塊中。站點(diǎn)塊之間沒有全局范圍或繼承關(guān)系。
? 如果只有一個(gè)站點(diǎn)塊,則其花括號(hào) { } 是可選的。
Caddyfile 由至少一個(gè)或多個(gè)站點(diǎn)塊組成,這些站點(diǎn)塊始終以一個(gè)或多個(gè)站點(diǎn)的地址開頭。出現(xiàn)在地址之前的任何指令都會(huì)讓解析器感到困惑。
特點(diǎn)
Caddy 是一個(gè)現(xiàn)代的、開源的 Web 服務(wù)器,它以其易用性和安全性而聞名。以下是 Caddy 的一些主要功能亮點(diǎn):
自動(dòng) HTTPS:Caddy 最顯著的特點(diǎn)之一是自動(dòng)為網(wǎng)站啟用 HTTPS。它通過自動(dòng)獲取和續(xù)訂 Let's Encrypt 的 SSL 證書來實(shí)現(xiàn)這一點(diǎn),無需手動(dòng)干預(yù)。
配置簡單:Caddy 使用 Caddyfile 配置文件,這是一種簡潔、易于理解的配置語法,使得配置服務(wù)器變得非常簡單。
模塊化:Caddy 是模塊化的,這意味著你可以根據(jù)需要添加或刪除功能。這提供了極大的靈活性,并保持了核心服務(wù)的輕量級(jí)。
內(nèi)置功能:Caddy 內(nèi)置了許多常用的功能,如 HTTP/2、HTTP/3、反向代理、負(fù)載均衡、Markdown 渲染、文件服務(wù)、請(qǐng)求重寫和重定向等。
安全性:Caddy 重視安全性,默認(rèn)啟用了一系列安全最佳實(shí)踐,如 TLS 1.3、OCSP stapling、HTTP Strict Transport Security (HSTS) 等。
多平臺(tái)支持:Caddy 支持多種操作系統(tǒng),包括 Linux、macOS、Windows、FreeBSD、OpenBSD、Docker 和 Kubernetes。
API 和插件:Caddy 提供了 API,允許開發(fā)者編寫插件來擴(kuò)展其功能。這些插件可以用多種編程語言編寫。
實(shí)時(shí)加載:Caddy 支持在不重啟服務(wù)器的情況下實(shí)時(shí)重新加載配置,這有助于減少停機(jī)時(shí)間。
量化日志:Caddy 的日志記錄功能支持結(jié)構(gòu)化日志輸出,便于日志分析和監(jiān)控。
易于更新:Caddy 可以通過簡單的命令行工具進(jìn)行更新,無需復(fù)雜的升級(jí)過程。
跨平臺(tái) GUI:Caddy 還提供了一個(gè)跨平臺(tái)的圖形用戶界面 (GUI),使得配置和管理更加直觀。
強(qiáng)大的路由功能:Caddy 的路由功能非常強(qiáng)大,支持匹配不同的請(qǐng)求條件,如路徑、主機(jī)名、查詢參數(shù)等,并執(zhí)行相應(yīng)的操作。
Caddy 的這些功能使其成為開發(fā)人員、系統(tǒng)管理員和企業(yè)用戶的受歡迎選擇,特別是對(duì)于那些尋求易于配置、維護(hù)和擴(kuò)展的 Web 服務(wù)器解決方案的用戶。
Caddy 與 Nginx 的對(duì)比
適用場景
Caddy 適合多種場景,特別是那些需要易用性、安全性和現(xiàn)代網(wǎng)絡(luò)技術(shù)的環(huán)境。以下是一些適合使用 Caddy 的場景:
靜態(tài)網(wǎng)站托管:Caddy 非常適合托管靜態(tài)網(wǎng)站,因?yàn)樗唵我子?,可以快速設(shè)置 HTTPS 和其他優(yōu)化功能。
個(gè)人項(xiàng)目:對(duì)于個(gè)人開發(fā)者來說,Caddy 的簡單配置和自動(dòng) HTTPS 功能使得它成為快速部署個(gè)人項(xiàng)目(如博客、個(gè)人網(wǎng)站等)的理想選擇。
反向代理和負(fù)載均衡:Caddy 可以作為反向代理服務(wù)器,將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù),同時(shí)支持負(fù)載均衡,適合需要分發(fā)流量到多個(gè)后端服務(wù)器的應(yīng)用。
API 服務(wù)器:Caddy 的路由功能和模塊化設(shè)計(jì)使其成為托管 RESTful API 的好選擇,可以輕松處理不同路徑和方法的請(qǐng)求。
服務(wù)端渲染 (SSR):對(duì)于需要服務(wù)端渲染的 Web 應(yīng)用,Caddy 可以與 Node.js、Python 等后端技術(shù)棧結(jié)合使用。
文件服務(wù)器:Caddy 可以輕松配置為文件服務(wù)器,提供文件下載服務(wù),支持目錄列表和權(quán)限控制。
WebSockets:Caddy 支持升級(jí) HTTP 連接為 WebSocket 連接,適合需要實(shí)時(shí)雙向通信的應(yīng)用,如聊天室、游戲服務(wù)器等。
容器化和微服務(wù):在容器化和微服務(wù)架構(gòu)中,Caddy 可以作為入口點(diǎn),管理到不同服務(wù)的流量,并自動(dòng)處理 TLS。
邊緣計(jì)算和 CDN:Caddy 可以在邊緣節(jié)點(diǎn)上運(yùn)行,作為內(nèi)容分發(fā)網(wǎng)絡(luò) (CDN) 的一部分,提供高效的內(nèi)容分發(fā)。
開發(fā)環(huán)境:Caddy 的實(shí)時(shí)重新加載配置功能使其成為開發(fā)環(huán)境中的理想選擇,可以快速測(cè)試配置更改。
小型企業(yè)和初創(chuàng)公司:對(duì)于資源有限的小型企業(yè)和初創(chuàng)公司,Caddy 提供了一個(gè)易于管理且功能強(qiáng)大的 Web 服務(wù)器解決方案。
安全性要求高的網(wǎng)站:由于 Caddy 默認(rèn)啟用許多安全最佳實(shí)踐,因此它適合那些對(duì)安全性有高要求的網(wǎng)站。
總之,Caddy 適用于任何需要可靠、高效、易于配置的 Web 服務(wù)器的場景,特別是那些希望利用現(xiàn)代網(wǎng)絡(luò)技術(shù)(如 HTTP/2、HTTP/3、自動(dòng) HTTPS)的項(xiàng)目。
閱讀原文:點(diǎn)擊這里
該文章在 2025/8/13 16:46:06 編輯過