這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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
反向 Proxy,管理多個網站
微服務的 API gateway ,我會專門寫一篇文章。
有些在nginx上難以開發的需求,為caddy寫外掛程式太方便了。
入門
安裝caddy
下載 caddy
把caddy放到系統的PATH中,讓其可以直接執行。比如Linux中一般習慣放到 /usr/local/bin
簡單測試
找一個做測試的臨時目錄,產生一個測試首頁。echo "hello world">index.html
執行 caddy
在另一個終端 curl localhost:2015
或在瀏覽器訪問 (http://localhost:2015)
Caddyfile
caddy的一個特色就是配置簡單,nginx的設定檔群已經越看越暈了。我們來試試:
在目前的目錄建立這樣一個叫Caddyfile
的檔案:
localhost:2020gzip
這次,我們改變了連接埠,並且啟用了gzip自動壓縮資料。運行caddy
,去你指定的地址看看吧。
說一句,caddy的潛規則是找目前的目錄叫Caddyfile
的檔案,你也可以用參數指定檔案和路徑。
更專業一點
我們隨便說點進階功能,其實caddy的文檔挺不錯的,看文檔就可以瞭解各種功能。
自動 HTTPS
如果你滿足這些條件,你用caddy啟動的應用將自動獲得HTTPS,不用你買認證了,這都是Let's 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 { 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}
開機啟動
因為大部分發行版目前還沒辦法直接安裝caddy,開機啟動可能需要你自己動手啦。
在你下載的壓縮包中有一個init檔案夾,裡邊有Mac,Linux,FreeBSD的開機啟動配置協助,
還有樣本指令碼,可以根據你的要求再DIY一下。
預告
作為入門就先介紹這麼多,我接下來的部落格將會寫一些好玩的或專業的caddy的用法。敬請期待。