新興的web服務器caddy

caddy 是一個像 Apache, nginx, 或 lighttpd 的web服務器。
你要問nginx已經很好了,爲何要用caddy呢? 我以爲caddy最大的特色是用起來簡單,
而後呢,它還有下面這些開箱即用的特性:php

  • HTTP/2 全自動支持HTTP/2協議,無需任何配置。html

  • Auto HTTPS Caddy 使用 Let's Encrypt 讓你的站點全自動變成全站HTTPS,無需任何配置。固然你想使用本身的證書也是能夠的。nginx

  • Multi-core 由於caddy是golang寫的,因此固然能夠合理使用多核啦。golang

  • IPv6 徹底支持IPv6環境.web

  • WebSockets Caddy 對WebSockets有很好的支持.apache

  • Markdown 自動把md轉成 HTML ,固然,我後續要給你們介紹更強大的hugo來幹這個事情.瀏覽器

  • Logging Caddy 對log格式的定義很容易,更好的知足你日誌收集的需求。服務器

  • Easy Deployment 得益於go的特性,caddy只是一個小小的二進制文件,沒有依賴,很好部署。php7

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

  • 做爲靜態頁面的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:2020
gzip

此次,咱們改變了端口,而且啓用了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的用法。敬請期待。

相關文章
相關標籤/搜索