新興的web伺服器caddy

caddy 是一個像 Apache, nginx, 或 lighttpd 的web伺服器。 你要問nginx已經很好了,為什麼要用caddy呢? 我覺得caddy最大的特點是用起來簡單, 然後呢,它還有下面這些開箱即用的特性:

  • HTTP/2 全自動支持HTTP/2協議,無需任何配置。
  • Auto HTTPS Caddy 使用 Let』s Encrypt 讓你的站點全自動變成全站HTTPS,無需任何配置。當然你想使用自己的證書也是可以的。
  • Multi-core 因為caddy是golang寫的,所以當然可以合理使用多核啦。
  • IPv6 完全支持IPv6環境.
  • WebSockets Caddy 對WebSockets有很好的支持.
  • Markdown 自動把md轉成 HTML ,當然,我後續要給大家介紹更強大的hugo來干這個事情.
  • Logging Caddy 對log格式的定義很容易,更好的滿足你日誌收集的需求。
  • Easy Deployment 得益於go的特性,caddy只是一個小小的二進位文件,沒有依賴,很好部署。

那麼在什麼場景下適合嘗試使用caddy呢,我推薦從以下場景開始:

  • 作為靜態頁面的webserver
  • 轉發 fastcgi 請求到 php-fpm 服務,比如替換apache或nginx作為wordpress的server
  • 反向代理,管理多個站點
  • 微服務的 API gateway ,我會專門寫一篇文章。
  • 有些在nginx上難以開發的需求,為caddy寫插件太方便了。

入門

安裝caddy

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

簡單測試

  1. 找一個做測試的臨時目錄,生成一個測試主頁。echo "hello world">index.html
  2. 執行 caddy
  3. 在另一個終端 curl localhost:2015 或在瀏覽器訪問 (http://localhost:2015)

Caddyfile

caddy的一個特色就是配置簡單,nginx的配置文件群已經越看越暈了。我們來試試:

在當前目錄創建這樣一個叫Caddyfile的文件:

localhost:2020ngzipn

這次,我們改變了埠,並且啟用了gzip自動壓縮數據。運行caddy,去你指定的地址看看吧。

說一句,caddy的潛規則是找當前目錄叫Caddyfile的文件,你也可以用參數指定文件和路徑。

更專業一點

我們隨便說點高級功能,其實caddy的文檔挺不錯的,看文檔就可以了解各種功能。

自動 HTTPS

如果你滿足這些條件,你用caddy啟動的應用將自動獲得HTTPS,不用你買證書了,這都是Lets Encrypt的功勞。

  • host 那裡要填一個域名,不能是 localhost 或 IP
  • 不要用冒號手動指定埠
  • 不要在域名前手動聲明http
  • 沒在配置里關掉TLS 或者聲明用自己的證書但是還沒配好
  • caddy 有許可權綁定 80 和 443 埠

前邊都能懂,說下最後一條。在init文件夾的啟動配置教程里都有,一般建議你用www-data用戶啟動服務, 你不是root但是Linux依然可以讓你綁定80埠,只需要執行setcap cap_net_bind_service=+ep caddy 。 具體看文檔吧。

多站點

你可能想,之前用nginx主要是為了支持多站點,caddy當然也是可以的,你只需要配置若干域名, 把每個域名的配置寫在後邊的大括弧配置塊里就行了。下一個例子里就有。

PHP or WordPress

據說全世界四分之一的站點都是wordpress搭建的,而PHP公認是世界上最好的語言。 caddy還沒有完全支持unix socket通訊呢,趕忙先把PHP支持了再說。

這是我自己博客的配置片段,我的荒蕪的非技術博客依然用的wordpress。 timeouts關鍵字是我摸索出來的,官方示例沒有,不設置這個國內升級插件什麼的根本成功不了。 tls其實用默認值是可以的,但是後台會有一堆落後的搜索引擎和爬蟲報錯,於是我調低了一點。 另外我還把www定向到了裸域名,大家一般都這樣做,或者反過來。

xiafeng.net {n root /data/xiafeng/publicn timeouts 10mn gzipn tls {n protocols tls1.0 tls1.2n }n fastcgi / unix:/var/run/php/php7.0-fpm.sock phpn rewrite {n if {path} not_match ^/wp-adminn to {path} {path}/ /index.php?_url={uri}n }n}nnwww.xiafeng.net {n redir https://xiafeng.netn}n

開機啟動

因為大部分發行版目前還沒辦法直接安裝caddy,開機啟動可能需要你自己動手啦。

在你下載的壓縮包中有一個init文件夾,裡邊有Mac,Linux,FreeBSD的開機啟動配置幫助, 還有示例腳本,可以根據你的要求再DIY一下。

預告

作為入門就先介紹這麼多,我接下來的博客將會寫一些好玩的或專業的caddy的用法。敬請期待。

推薦閱讀:

淺談前端線上部署與運維
為什麼考慮到溢出用減法來比較更好?
有哪些知名網站Web伺服器是Nginx?
nginx配置https

TAG:Go语言 | Nginx | Web服务器 |