caddy 是一個(gè)像 Apache, nginx, 或 lighttpd 的web服務(wù)器。
你要問nginx已經(jīng)很好了,為什么要用caddy呢? 我覺得caddy最大的特點(diǎn)是用起來簡單,
然后呢,它還有下面這些開箱即用的特性:
-
HTTP/2全自動(dòng)支持HTTP/2協(xié)議,無需任何配置。 -
Auto HTTPSCaddy 使用 Let's Encrypt 讓你的站點(diǎn)全自動(dòng)變成全站HTTPS,無需任何配置。當(dāng)然你想使用自己的證書也是可以的。 -
Multi-core因?yàn)閏addy是golang寫的,所以當(dāng)然可以合理使用多核啦。 -
IPv6完全支持IPv6環(huán)境. -
WebSocketsCaddy 對(duì)WebSockets有很好的支持. -
Markdown自動(dòng)把md轉(zhuǎn)成 HTML ,當(dāng)然,我后續(xù)要給大家介紹更強(qiáng)大的hugo來干這個(gè)事情. -
LoggingCaddy 對(duì)log格式的定義很容易,更好的滿足你日志收集的需求。 -
Easy Deployment得益于go的特性,caddy只是一個(gè)小小的二進(jìn)制文件,沒有依賴,很好部署。
那么在什么場景下適合嘗試使用caddy呢,我推薦從以下場景開始:
- 作為靜態(tài)頁面的webserver
- 轉(zhuǎn)發(fā) fastcgi 請求到 php-fpm 服務(wù),比如替換apache或nginx作為wordpress的server
- 反向代理,管理多個(gè)站點(diǎn)
- 微服務(wù)的 API gateway ,我會(huì)專門寫一篇文章。
- 有些在nginx上難以開發(fā)的需求,為caddy寫插件太方便了。
入門
安裝caddy
- 下載 caddy
- 把caddy放到系統(tǒng)的PATH中,讓其可以直接執(zhí)行。比如Linux中一般習(xí)慣放到
/usr/local/bin
簡單測試
- 找一個(gè)做測試的臨時(shí)目錄,生成一個(gè)測試主頁。
echo "hello world">index.html - 執(zhí)行
caddy - 在另一個(gè)終端
curl localhost:2015或在瀏覽器訪問 (http://localhost:2015)
Caddyfile
caddy的一個(gè)特色就是配置簡單,nginx的配置文件群已經(jīng)越看越暈了。我們來試試:
在當(dāng)前目錄創(chuàng)建這樣一個(gè)叫Caddyfile的文件:
localhost:2020
gzip
這次,我們改變了端口,并且啟用了gzip自動(dòng)壓縮數(shù)據(jù)。運(yùn)行caddy,去你指定的地址看看吧。
說一句,caddy的潛規(guī)則是找當(dāng)前目錄叫Caddyfile的文件,你也可以用參數(shù)指定文件和路徑。
更專業(yè)一點(diǎn)
我們隨便說點(diǎn)高級(jí)功能,其實(shí)caddy的文檔挺不錯(cuò)的,看文檔就可以了解各種功能。
自動(dòng) HTTPS
如果你滿足這些條件,你用caddy啟動(dòng)的應(yīng)用將自動(dòng)獲得HTTPS,不用你買證書了,這都是Let's Encrypt的功勞。
- host 那里要填一個(gè)域名,不能是 localhost 或 IP
- 不要用冒號(hào)手動(dòng)指定端口
- 不要在域名前手動(dòng)聲明http
- 沒在配置里關(guān)掉TLS 或者聲明用自己的證書但是還沒配好
- caddy 有權(quán)限綁定 80 和 443 端口
前邊都能懂,說下最后一條。在init文件夾的啟動(dòng)配置教程里都有,一般建議你用www-data用戶啟動(dòng)服務(wù),
你不是root但是Linux依然可以讓你綁定80端口,只需要執(zhí)行setcap cap_net_bind_service=+ep caddy 。
具體看文檔吧。
多站點(diǎn)
你可能想,之前用nginx主要是為了支持多站點(diǎn),caddy當(dāng)然也是可以的,你只需要配置若干域名,
把每個(gè)域名的配置寫在后邊的大括號(hào)配置塊里就行了。下一個(gè)例子里就有。
PHP or Wordpress
據(jù)說全世界四分之一的站點(diǎn)都是wordpress搭建的,而PHP公認(rèn)是世界上最好的語言。
caddy還沒有完全支持unix socket通訊呢,趕忙先把PHP支持了再說。
這是我自己博客的配置片段,我的荒蕪的非技術(shù)博客依然用的wordpress。
timeouts關(guān)鍵字是我摸索出來的,官方示例沒有,不設(shè)置這個(gè)國內(nèi)升級(jí)插件什么的根本成功不了。
tls其實(shí)用默認(rèn)值是可以的,但是后臺(tái)會(huì)有一堆落后的搜索引擎和爬蟲報(bào)錯(cuò),于是我調(diào)低了一點(diǎn)。
另外我還把www定向到了裸域名,大家一般都這樣做,或者反過來。
xiafeng.net {
root /data/xiafeng/public
timeouts 10m
gzip
tls {
protocols tls1.0 tls1.2
}
fastcgi / unix:/var/run/php/php7.0-fpm.sock php
rewrite {
if {path} not_match ^\/wp-admin
to {path} {path}/ /index.php?_url={uri}
}
}
www.xiafeng.net {
redir https://xiafeng.net
}
開機(jī)啟動(dòng)
因?yàn)榇蟛糠职l(fā)行版目前還沒辦法直接安裝caddy,開機(jī)啟動(dòng)可能需要你自己動(dòng)手啦。
在你下載的壓縮包中有一個(gè)init文件夾,里邊有Mac,Linux,FreeBSD的開機(jī)啟動(dòng)配置幫助,
還有示例腳本,可以根據(jù)你的要求再DIY一下。
預(yù)告
作為入門就先介紹這么多,我接下來的博客將會(huì)寫一些好玩的或?qū)I(yè)的caddy的用法。敬請期待。