自動 HTTPS
Caddy 是第一個預設就用 HTTPS 的主流 Web 伺服器。設定裡出現主機名時,它會申請憑證、自動續期,並把 80 埠的 HTTP 轉到 443。你不必再外掛 Certbot,也不用自己排 cron。
官方說明:Automatic HTTPS、HTTPS 快速入門。
公開網域怎麼「自動」
同時滿足這些條件時,憑證會自己來:
- Caddyfile 的站台位址是公開網域(例如
example.com),不是只有:80。 - 該網域的 A/AAAA 指到這台伺服器。
- 從外網連得到 80 與 443(防火牆、安全群組、家用路由器轉埠都算)。
- Caddy 能綁這些埠,且資料目錄可寫、會持久保存(憑證存在這裡)。
就這樣。第一次啟動會跟 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。
其他裝置要連這台伺服器,也必須信任同一張根憑證。
暫時關閉或改走 HTTP
正式站很少需要關自動 HTTPS。本機或除錯可把位址寫成 http:// 或加 :80:
全域選項 auto_https off 只關掉自動申請與轉址,不會把站改成 HTTP。真的要明文,改站台位址。
On-Demand TLS
客戶自帶網域(白牌 SaaS)時,無法在啟動當下列出所有主機名。On-Demand TLS 會在 TLS handshake 當下才申請憑證。這是進階功能,必須加允許清單或問詢端點,否則會被濫用去申請別人的網域。作者演講裡有說明,見 官方與作者影音。
實作示範也可對照 YouTube 優質教學。