簡介
Caddy 2 是一個強(qiáng)大的、企業(yè)級的、開源的 Web 服務(wù)器。是一個 Go 編寫的 Web 服務(wù)器,類似于 Nginx,Caddy 提供了更加強(qiáng)大的功能。
![88ddf688-648a-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/ED/wKgaomTnPCSANr8cAAM2Qf5yCCM216.png)
支持 HTTP/2 的 Web 服務(wù)端。它使用 Golang 標(biāo)準(zhǔn)庫提供 HTTP 功能。Caddy 一個顯著的特性是默認(rèn)啟用HTTPS。它是第一個無需額外配置即可提供HTTPS 特性的Web 服務(wù)器。
- 官網(wǎng):https://caddyserver.com
- 文檔:https://caddyserver.com/docs/
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
- 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 視頻教程:https://doc.iocoder.cn/video/
特性
- 全自動支持 HTTP/2 協(xié)議,無需配置。
- 全自動變成 HTTPS 站點(diǎn),無需任何配置。
- 合理使用多核
- 支持 IPv6 環(huán)境
- 對 WebSockets 有很好的支持
- 可以自動把 Markdown 轉(zhuǎn)成 HTML
- Caddy 對 log 格式的定義很容易
- 易于部署 ,沒有依賴
- 作為反向代理支持主動和被動健康檢查、負(fù)載均衡、斷路、緩存等功能。
- 支持 Windows、 Linux、Mac 三大主流系統(tǒng)
相較于 Nginx 來說使用 Caddy 的優(yōu)勢如下
![88f8f3ca-648a-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/ED/wKgaomTnPCWAc1V6AAFU3iuK_ko657.png)
- 自動的 HTTPS 證書申請(ACME HTTP/DNS 挑戰(zhàn))
- 自動證書續(xù)期以及 OCSP stapling 等
- 更高的安全性包括但不限于 TLS 配置以及內(nèi)存安全等
- 友好且強(qiáng)大的配置文件支持
- 支持 API 動態(tài)調(diào)整配置(有木有人可以搞個 Dashboard)
- 支持 HTTP3(QUIC)
- 支持動態(tài)后端,例如連接 Consul、作為 k8s ingress 等
- 后端多種負(fù)載策略以及健康檢測等
- 本身 Go 編寫,高度模塊化的系統(tǒng)方便擴(kuò)展(CoreDNS 基于 Caddy1 開發(fā))
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
安裝
下載地址:https://caddyserver.com/download
Fedora/RHEL/CentOS 8
$dnfinstall'dnf-command(copr)'
$dnfcoprenable@caddy/caddy
$dnfinstallcaddy
MacOS
brewinstallcaddy
RHEL/CentOS 7
$yuminstallyum-plugin-copr
$yumcoprenable@caddy/caddy
$yuminstallcaddy
Debian/Ubuntu/Raspbian
$sudoaptinstall-ydebian-keyringdebian-archive-keyringapt-transport-https
$curl-1sLf'https://dl.cloudsmith.io/public/caddy/stable/gpg.key'|sudotee/etc/apt/trusted.gpg.d/caddy-stable.asc
$curl-1sLf'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt'|sudotee/etc/apt/sources.list.d/caddy-stable.list
$sudoaptupdate
$sudoaptinstallcaddy
安裝完成后,在終端命令行下輸入 caddy :
$caddy
Caddyisanextensibleserverplatform.
usage:
caddy[]
commands:
adaptAdaptsaconfigurationtoCaddy'snativeJSON
build-infoPrintsinformationaboutthisbuild
environPrintstheenvironment
file-serverSpinsupaproduction-readyfileserver
fmtFormatsaCaddyfile
hash-passwordHashesapasswordandwritesbase64
helpShowshelpforaCaddysubcommand
list-modulesListstheinstalledCaddymodules
reloadChangestheconfigoftherunningCaddyinstance
reverse-proxyAquickandproduction-readyreverseproxy
runStartstheCaddyprocessandblocksindefinitely
startStartstheCaddyprocessinthebackgroundandthenreturns
stopGracefullystopsastartedCaddyprocess
trustInstallsaCAcertificateintolocaltruststores
untrustUntrustsalocally-trustedCAcertificate
upgradeUpgradeCaddy(EXPERIMENTAL)
validateTestswhetheraconfigurationfileisvalid
versionPrintstheversion
Use'caddyhelp'formoreinformationaboutacommand.
Fulldocumentationisavailableat:
常用命令
$systemctlstart[stop|restart]caddy//啟動服務(wù)
$systemctlreloadcaddy//重新加載配置文件
$systemctlstatuscaddy//查看運(yùn)行狀態(tài)
配置
Caddy2 的配置文件核心采用 json,但是 json 可讀性不強(qiáng),所以官方維護(hù)了一個轉(zhuǎn)換器,抽象出稱之為 Caddyfile 的新配置格式;關(guān)于 Caddyfile 的完整語法請查看官方文檔。文檔地址:https://caddyserver.com/docs/caddyfile
常用配置
站點(diǎn)配置
(site_option){
encodezstdgzip
file_server
handle_errors{
rewrite*/{http.error.status_code}.html
file_server
}
importacme_https
importlog_file
root*/www/{host}
}
多域名配置
地址{
........
}
這個地址支持以下幾種格式
localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
全局配置選項(xiàng)
{
#開啟所有的調(diào)試輸出
debug
#設(shè)定默認(rèn)的sni
default_snidomain.com
#打開或關(guān)閉管理端口
adminoff
}
錯誤頁面跳轉(zhuǎn)
www.mingongge.com{
root*/web/mingongge.com/
file_server
handle_errors{
rewrite*/{http.error.status_code}.html
file_server
}
}
Log 日志
(log_file){
log{
formatlogfmt
outputfile/var/log/caddy/{host}.access.log{
roll_keep7
}
}
}
Header
www.mingongge.com{
root*/web/mingongge.com/
file_server
headerAccess-Control-Allow-Origin*
headerCache-Controlmax-age=3600
header/css/*Cache-Controlmax-age=604800
}
Cache-Control
(cachecontrol){
header/css/*Cache-Controlmax-age=3600
header/img/*Cache-Controlmax-age=3600
header/js/*Cache-Controlmax-age=3600
}
反向代理
https://www.mingongge.com{
gzip
tlsadmin@mingongge.com
proxy/https://welcome.mingongge.com
}
快速創(chuàng)建一個站點(diǎn)
caddyfile-server--website./index--listen:8088--domainwww.mingongge.com
參數(shù)說明
file-server#這是一個文件服務(wù)器
--website#文件服務(wù)的根目錄
./index#首頁文件的存儲目錄(如存放index.html)
--listen:8088#定義監(jiān)聽端口
--domainwww.mingongge.com#綁定域名
配置片段
Caddyfile 支持類似代碼中 function 一樣的配置片段,這些配置片段可以在任意位置被 import,同時可以接受參數(shù),以下為配置片斷示例:
#括號內(nèi)為片段名稱,可以自行定義
(TLS){
protocolstls1.2tls1.3
ciphersTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
#在任意位置可以引用此片段從而達(dá)到配置復(fù)用
importTLS
配置模塊化
import 指令除了支持引用配置片段以外,還支持引用外部文件,同時支持通配符,有了這個命令以后我們就可以方便的將配置文件進(jìn)行模塊化處理:
#引用外部的/etc/caddy/*.caddy
import/etc/caddy/*.caddy
模塊化配置實(shí)例
Caddyfile
Caddyfile 類似于 nginx 的 nginx.conf 主配置。
(LOG){
log{
formatformatted"[{ts}]{request>remote_addr}{request>proto}{request>method}<-?{status}?->{request>host}{request>uri}{request>headers>User-Agent>[0]}"{
time_format"iso8601"
}
outputfile"{args.0}"{
roll_size100mb
roll_keep3
roll_keep_for7d
}
}
}
(TLS){
protocolstls1.2tls1.3
ciphersTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
(HSTS){
header/Strict-Transport-Security"max-age=63072000"
}
(ACME_GANDI){
#從環(huán)境變量獲取GANDI_API_TOKEN
dnsgandi{$GANDI_API_TOKEN}
}
#聚合上面的配置片段為新的片段
(COMMON_CONFIG){
#壓縮支持
encodezstdgzip
#TLS配置
tls{
importTLS
importACME_GANDI
}
#HSTS
importHSTS
}
#開啟HTTP3實(shí)驗(yàn)性支持
{
servers:443{
protocol{
experimental_http3
}
}
}
#引入其他具體的站點(diǎn)配置
import/etc/caddy/*.caddy
站點(diǎn)配置
www.mingongge.com{
#重定向到mingongge.com(默認(rèn)302)
redirhttps://mingongge.com{uri}
#日志
importLOG"/data/logs/mingongge.com.log"
#TLS、HSTS、ACME等通用配置
importCOMMON_CONFIG
}
mingongge.com{
#路由
route/*{
reverse_proxymingongge_com:80
}
#日志
importLOG"/data/logs/mingongge.com.log"
#TLS、HSTS、ACME等通用配置
importCOMMON_CONFIG
}
配置完成后,通過 systemctl start caddy 去啟動 caddy 服務(wù)器。每次配置修改后可以通過 systemctl reload caddy 進(jìn)行配置重載。這些命令的功能與 Nginx 的命令功能基本一樣。
總結(jié)
Caddy 內(nèi)置了豐富的插件,例如 “file_server”、內(nèi)置各種負(fù)載均衡策略等,這些插件組合在一起可以實(shí)現(xiàn)一些復(fù)雜的功能。Caddy 采用 Go 語言編寫,相比較而言(Nginx 通過 Lua 或者 C 開發(fā)插件),對于后期的開發(fā)更容易上手。
審核編輯 :李倩
-
Web
+關(guān)注
關(guān)注
2文章
1269瀏覽量
69736 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9308瀏覽量
86073 -
nginx
+關(guān)注
關(guān)注
0文章
154瀏覽量
12235
原文標(biāo)題:比 Nginx 性能更強(qiáng)的下一代 Web 服務(wù)器
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
華為云 Flexus 云服務(wù)器 X 實(shí)例下的 Redis 性能基準(zhǔn)測試
![華為云 Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例下的 Redis <b class='flag-5'>性能</b>基準(zhǔn)測試](https://file1.elecfans.com//web3/M00/04/30/wKgZPGdxDzCAL4GYAADhOwR0lOk604.png)
華為 FlexusX 與 Docker+Nginx 的高效整合之路
![華為 FlexusX 與 Docker+<b class='flag-5'>Nginx</b> 的高效整合之路](https://file1.elecfans.com//web3/M00/04/7A/wKgZPGd0HLGANzOxAAEA43MSbXE681.png)
部署音樂流媒體服務(wù)器 mStream
![部署音樂流媒體<b class='flag-5'>服務(wù)器</b> mStream](https://file1.elecfans.com//web3/M00/06/49/wKgZPGeJsFuAN6O0AAE3gHj2srQ743.png)
華為云彈性云服務(wù)器 FlexusX 實(shí)例下的 Nginx 性能測試
![華為云彈性云<b class='flag-5'>服務(wù)器</b> FlexusX 實(shí)例下的 <b class='flag-5'>Nginx</b> <b class='flag-5'>性能</b>測試](https://file1.elecfans.com//web3/M00/06/52/wKgZO2eJr7yAPspBAAGWT-z8TtE094.png)
「服務(wù)器」Nginx Proxy Manager申請cloudflare泛域名
![「<b class='flag-5'>服務(wù)器</b>」<b class='flag-5'>Nginx</b> Proxy Manager申請cloudflare泛域名](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
nginx隱藏版本號與WEB服務(wù)器信息
![<b class='flag-5'>nginx</b>隱藏版本號與<b class='flag-5'>WEB</b><b class='flag-5'>服務(wù)器</b>信息](https://file1.elecfans.com/web2/M00/0C/2B/wKgZomc_7AmASNNGAAAhmLrsbJU982.png)
nginx負(fù)載均衡配置介紹
![<b class='flag-5'>nginx</b>負(fù)載均衡配置介紹](https://file1.elecfans.com/web1/M00/F4/AF/wKgZoWcwR1KAFNnbAAAYwR5LGfU815.png)
意法半導(dǎo)體下一代汽車微控制器的戰(zhàn)略部署
Jtti:美國VPS開啟nginx狀態(tài)監(jiān)控,查看web服務(wù)器的并發(fā)連接數(shù)
IaaS+on+DPU(IoD)+下一代高性能算力底座技術(shù)白皮書
如何使用espconn api實(shí)現(xiàn)一個Web服務(wù)器?
24芯M16插頭在下一代技術(shù)中的潛力
![24芯M16插頭在<b class='flag-5'>下一代</b>技術(shù)中的潛力](https://file1.elecfans.com/web2/M00/C7/C5/wKgaomYNDb-APj1XAADMmxdUgA0497.png)
評論