Skip to content

建立 2026-09-15 更新 2026-09-15

自動 HTTPS

Caddy 是第一個預設就用 HTTPS 的主流 Web 伺服器。設定裡出現主機名時,它會申請憑證、自動續期,並把 80 埠的 HTTP 轉到 443。你不必再外掛 Certbot,也不用自己排 cron。

官方說明:Automatic HTTPSHTTPS 快速入門

公開網域怎麼「自動」

同時滿足這些條件時,憑證會自己來:

  1. Caddyfile 的站台位址是公開網域(例如 example.com),不是只有 :80
  2. 該網域的 A/AAAA 指到這台伺服器。
  3. 從外網連得到 80 與 443(防火牆、安全群組、家用路由器轉埠都算)。
  4. Caddy 能綁這些埠,且資料目錄可寫、會持久保存(憑證存在這裡)。
example.com {
    reverse_proxy 127.0.0.1:3000
}

就這樣。第一次啟動會跟 ACME CA(預設 Let's Encrypt,必要時 ZeroSSL)完成挑戰,之後在到期前續期。全域區塊可加 email,方便接收憑證相關通知。

不要刪掉憑證儲存

Linux 套件預設把狀態放在 /var/lib/caddy/.local/share/caddy。Docker 務必掛上 /data volume。每次重建容器若憑證消失,會反覆向 Let's Encrypt 申請,容易觸發速率限制。

兩種常見挑戰

方式 何時用 條件
HTTP-01 預設 CA 能用 HTTP 連到你的 80 埠
TLS-ALPN-01 備用 CA 能連到 443
DNS-01 泛域名 *.example.com,或 80/443 無法從外網進來 需要 DNS 供應商模組(標準套件沒有)

家用網路、CDN 橙色雲、只開內網的服務,HTTP-01 常會失敗。這時改 DNS-01:用 xcaddy 編進 caddy-dns/cloudflare 之類的模組,讓 Caddy 代為寫 TXT 紀錄。做法見 模組與 xcaddy

本機與內網 HTTPS

localhost*.localhost、區網 IP 不會去跟公開 CA 申請,而是用 Caddy 內部 CA 簽短效憑證。第一次可能提示安裝根憑證。

  • 以 systemd 跑時,行程使用者是 caddy,沒有權限改系統信任清單,需 sudo caddy trust
  • 瀏覽器若自帶憑證庫(Firefox、Chrome),還要在瀏覽器裡另外匯入根憑證。
  • 純內網主機名可用 tls internal,讓瀏覽器走內部 CA,而不是 Let's Encrypt。
whoami.homelab.lan {
    tls internal
    reverse_proxy whoami:80
}

其他裝置要連這台伺服器,也必須信任同一張根憑證。

暫時關閉或改走 HTTP

正式站很少需要關自動 HTTPS。本機或除錯可把位址寫成 http:// 或加 :80

http://localhost {
    respond "plain HTTP"
}

全域選項 auto_https off 只關掉自動申請與轉址,不會把站改成 HTTP。真的要明文,改站台位址。

On-Demand TLS

客戶自帶網域(白牌 SaaS)時,無法在啟動當下列出所有主機名。On-Demand TLS 會在 TLS handshake 當下才申請憑證。這是進階功能,必須加允許清單或問詢端點,否則會被濫用去申請別人的網域。作者演講裡有說明,見 官方與作者影音

實作示範也可對照 YouTube 優質教學