Contents

Caddy Web Server初次小體驗

Caddy 是一款以 Go 語言撰寫的現代 Web 伺服器,最大特色是自動申請並更新 Let’s Encrypt HTTPS 憑證,設定檔語法簡潔易讀,對比 Nginx 和 Apache 的複雜設定,Caddy 的門檻相當低。

安裝 Caddy

Linux(使用官方安裝腳本)

1
2
3
4
5
6
# Ubuntu / Debian
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Windows

前往 GitHub Releases 下載對應平台的執行檔,或使用 Chocolatey:

1
choco install caddy

macOS

1
brew install caddy

基本使用(無設定檔)

直接執行 Caddy 可快速啟動靜態檔案伺服器:

1
caddy file-server --listen :8080

預設在目前目錄啟動,port 2015,沒有 Caddyfile 時自動使用預設設定。

Caddyfile 設定範例

Caddyfile 是 Caddy 的設定檔,語法非常簡潔。

靜態網站(本機開發)

1
2
3
4
5
localhost:80
root . /var/www/html
file_server
gzip
log
  • file_server:啟用靜態檔案服務(等同 Nginx 的 autoindex 概念)
  • gzip:啟用 Gzip 壓縮
  • log:記錄存取日誌

指定 Caddyfile 路徑

1
caddy run --config C:\Users\xxx\Desktop\caddy\Caddyfile

自動 HTTPS(生產環境)

只要使用真實網域,Caddy 會自動向 Let’s Encrypt 申請憑證,無需任何額外設定:

1
2
3
4
5
6
example.com {
    root * /var/www/html
    file_server
    encode gzip
    log
}

反向代理(Reverse Proxy)

常見用途是將 Caddy 作為前端,將請求轉發到後端應用:

1
2
3
4
5
6
7
example.com {
    reverse_proxy localhost:3000
}

api.example.com {
    reverse_proxy localhost:8080
}

HTTP 重導向至 HTTPS

使用真實網域時,Caddy 預設會自動做 HTTP → HTTPS 重導向。若要手動設定:

1
2
3
4
5
6
7
8
http://example.com {
    redir https://example.com{uri} permanent
}

https://example.com {
    root * /var/www/html
    file_server
}

目錄瀏覽(Browse)

browse 功能讓目錄以網頁列表形式呈現,類似 Apache 的 autoindex

1
2
3
4
localhost:80 {
    root . /files
    file_server browse
}

與 Nginx / Apache 的比較

特性 Caddy Nginx Apache
HTTPS 自動申請 ✅ 內建 ❌ 需搭配 Certbot ❌ 需搭配 Certbot
設定檔複雜度
效能 極高
生態系成熟度
HTTP/2, HTTP/3 支援 需設定 需設定

Caddy v2 的更新

Caddy v2(2020 年發布)進行了大幅重寫:

  • JSON API:可透過 REST API 動態修改設定,不需重啟服務
  • Caddyfile 語法調整:部分指令名稱改變(如 gzipencode gzip
  • 更好的插件系統:模組化架構,功能更容易擴展
  • caddy-git:可在設定更新時自動 git pull,適合靜態網站自動部署

若使用 v1 語法遇到問題,請注意版本差異並參閱官方遷移指南

參考資料