技術漫談|快速上手更簡單的 Web 伺服器——Caddy

說到Web 服務器,我們大多想到的是 Apache 這個老前輩和如日中天的Nginx,但是今天我將要分享的是 Web 服務器和反向代理服務器的新秀 Caddy。在我們擁有了這麼強大的 Nginx 以後為什麼還需要 Caddy? 我認為 Caddy 之所以可以佔有一席之地是因為它的兩大法寶:配置簡單 和 自動啟用 HTTPS。下面介紹如何快速上手這個軟件。

Caddy 提醒定製化的下載,可以自由選擇各種插件和平臺。

請前往:https://caddyserver.com/download 下載。 也可以使用這個一鍵安裝腳本:

完成之後,我們可以嘗試執行下caddy -version。 當你看到有有類似:Caddy 0.10.9,即表示安裝成功。

在命令行裡面直接輸入caddy,然後打開瀏覽器輸入: http://ip:2015。 看到什麼了嗎? 你得到了一個404頁面。Caddy 已經成功運行了。相比與其他瀏覽器需要各種配置文件才能運行相比,這就是 Caddy 的簡單之處,不需要任何配置文件即可運行。當然,在我們需要各種高級功能的時候,配置文件還是必不可少的。

默認情況下,Caddy 運行在2015 端口。我們可以用 Caddy 強大的命令行工具來自定義運行端口。

在無配置文件的情況下,Caddy 默認是映射當前程序執行目錄的所有文件。因此我們可以快速創建一個文件:

再次刷新瀏覽器,剛才我們寫的 Hello Caddy 已經出現在頁面上了

Caddy 各種強大的功能還得需要 Caddyfile 體現。我們可以在任意目錄放置我們的配置文件,通過命令行caddy -conf 即可指定

這裡簡單解釋下,0.0.0.0 表示我們將網站綁定至可以訪問到本機的任意一個 IP;8080表示我們將網站暴露在8080端口; root 參數則表示網站的根節點。這就是最簡單的一個Host 網站的配置。

當前我們可以對網站添加更多的配置。比如設置響應過期時間,啟用 gzip, 指定各種日誌的輸出端。

什麼時候你會需要反向代理呢?想象你有一個前後端分離的程序。前端是通過 JS 發送 Ajax 請求後端 API。默認情況下前端程序佔用一個端口,後端佔用一個另外端口。我們會遇到兩個問題: CORS(跨域請求)和額外的 Options 請求。 這個時候我們就可以使用反向代理讓前端和後端共享一個端口。

那怎麼做呢,在 Caddy 裡面也特別簡單,假設我們的前端就是上面那樣,我們的後面之前都運行在:http://ip:4000 下面。而且我們的 後端 API URL 裡面都有 /api

這裡的配置的意思是說,當瀏覽器收到所有包含:8080/api 的請求都會自動轉發到127.0.0.1:4000/api 這個地址,而:8080/api 後面的地址會自動轉發下去,而transparent這個設置保證了我們的轉發不會在瀏覽器生成任何額外的301 或者302請求。

Caddy 另外一個亮點就是,能為已經綁定域名的在公網運行的服務器自動從 Let's Encrypt生成和下載 HTTPS 證書,讓你的網站支持 HTTPS 協議訪問,保證網站數據傳輸的安全。很簡單,你所需的僅僅是將綁定的 IP 改成域名。

再次運行Caddy,按照提示輸入你的 Email 之後。Caddy 會自動幫你獲取並啟用 HTTPS 證書。

通過上面的例子,我們可以看到 Caddy的快速上手能力和超級實用的 HTTPS 功能。同時 Caddy 還提供了一大堆的插件供我們使用。比如直接訪問 Markdown 文件、Host Git 倉庫的文件,將自身 Metric 數據傳到 Prometheus 等等。

快去試試吧!