新興的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
- 下載 caddy
- 把caddy放到系統的PATH中,讓其可以直接執行。比如Linux中一般習慣放到 /usr/local/bin
簡單測試
- 找一個做測試的臨時目錄,生成一個測試主頁。echo "hello world">index.html
- 執行 caddy
- 在另一個終端 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