新興的web服務(wù)器caddy

caddy 是一個(gè)像 Apache, nginx, 或 lighttpd 的web服務(wù)器。
你要問nginx已經(jīng)很好了,為什么要用caddy呢? 我覺得caddy最大的特點(diǎn)是用起來簡單,
然后呢,它還有下面這些開箱即用的特性:

  • HTTP/2 全自動(dòng)支持HTTP/2協(xié)議,無需任何配置。
  • Auto HTTPS Caddy 使用 Let's Encrypt 讓你的站點(diǎn)全自動(dòng)變成全站HTTPS,無需任何配置。當(dāng)然你想使用自己的證書也是可以的。
  • Multi-core 因?yàn)閏addy是golang寫的,所以當(dāng)然可以合理使用多核啦。
  • IPv6 完全支持IPv6環(huán)境.
  • WebSockets Caddy 對(duì)WebSockets有很好的支持.
  • Markdown 自動(dòng)把md轉(zhuǎn)成 HTML ,當(dāng)然,我后續(xù)要給大家介紹更強(qiáng)大的hugo來干這個(gè)事情.
  • Logging Caddy 對(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

  1. 下載 caddy
  2. 把caddy放到系統(tǒng)的PATH中,讓其可以直接執(zhí)行。比如Linux中一般習(xí)慣放到 /usr/local/bin

簡單測試

  1. 找一個(gè)做測試的臨時(shí)目錄,生成一個(gè)測試主頁。echo "hello world">index.html
  2. 執(zhí)行 caddy
  3. 在另一個(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的用法。敬請期待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容