反向代理
反向代理(reverse proxy)讓瀏覽器只連 Caddy 的 80/443,再由 Caddy 轉到後面真正的應用程式。後端可以關在防火牆內、用明文 HTTP,對外仍是 HTTPS。這是 homelab 與小型生產環境最常見的用法。
官方:Reverse proxy 快速入門、reverse_proxy 指令。
最小設定
瀏覽器連 https://example.com,Caddy 終止 TLS,再把請求轉到本機 3000 埠。Host 等標頭預設原樣轉送。
多個子網域就寫多個區塊:
Docker 裡不要寫 localhost
在容器裡,localhost 是「這個容器自己」,不是主機、也不是隔壁容器。後端要用服務名稱,而且 Caddy 與後端必須在同一 Docker 網路:
Compose 範例見 Docker 部署。
路徑分流
同一個網域依路徑轉到不同後端時,用 handle 互斥,避免兩條規則都匹配:
example.com {
handle /api/* {
reverse_proxy 127.0.0.1:8080
}
handle {
reverse_proxy 127.0.0.1:3000
}
}
handle_path /api/* 會在轉發前把 /api 前綴切掉。後端若自己也預期 /api,用 handle 即可。
負載平衡與健康檢查
多個上游時,Caddy 會做負載平衡。可加策略與主動健康檢查:
example.com {
reverse_proxy 10.0.1.1:80 10.0.1.2:80 {
lb_policy least_conn
health_uri /health
fail_duration 5s
}
}
被動失敗(連不上、5xx)會讓該上游暫時退出輪詢。動態後端(SRV、K8s)見官方 dynamic 模組說明。
HTTPS 後端
後端自己也是 HTTPS(例如 Portainer 的 9443 自簽憑證)時:
portainer.example.com {
reverse_proxy https://portainer:9443 {
transport http {
tls_insecure_skip_verify
}
}
}
tls_insecure_skip_verify 只表示 Caddy 到後端 不驗證憑證,瀏覽器到 Caddy 這段仍是你的公開憑證。內網自簽很常見,但正式環境更好的做法是讓後端使用 Caddy 信任的憑證。
指令列
沒有 Caddyfile 時:
適合臨時開一個 TLS 終端。長期運行仍應寫進設定檔並用服務管理器守護行程。
逐步畫面示範見 YouTube 優質教學,尤其 Jim's Garage、Christian Lempa 與 Syntax 的 Self Host 101。