反向代理快速入門
本指南將向您展示如何快速啟動並運行一個生產就緒的反向代理,無論是否使用 HTTPS。
先決條件
- 基本終端機/命令列技能
caddy
在您的 PATH 中- 一個正在運行的後端進程以進行代理
本教程假設您有一個後端 HTTP 服務在 127.0.0.1:9000
運行。這些命令適用於 Linux,但相同的原則適用於其他作業系統。
您可以運行一個簡單的反向代理而無需配置文件,或者您可以使用配置文件以獲得更高的靈活性和控制。
命令列
若要在您的機器上啟動從端口 2080 到端口 9000 的純文字 HTTP 代理
caddy reverse-proxy --from :2080 --to :9000
然後試試看
curl -v 127.0.0.1:2080
reverse-proxy
命令 旨在用於快速簡便的反向代理。(如果您的需求很簡單,您可以在生產環境中使用它。)
Caddyfile
在目前的工作目錄中,建立一個名為 Caddyfile
的檔案,內容如下
:2080
reverse_proxy :9000
該配置文件大致等同於上面的 caddy reverse-proxy
命令。
然後,從同一個目錄中,運行
caddy run
然後試試您的代理
curl -v 127.0.0.1:2080
如果您更改了 Caddyfile,請務必 重新載入 Caddy。
這是一個簡單的例子。您可以使用 reverse_proxy
指令 做更多的事情。
從客戶端到代理的 HTTPS
如果 Caddy 知道主機名稱(網域名稱),它將 自動且預設 通過 HTTPS 提供您的代理服務。如果您省略 --from
標誌,caddy reverse-proxy
命令將預設為 localhost
,或者您可以將 Caddyfile 的第一行替換為代理的網域名稱。
- 如果您使用
localhost
或任何以.localhost
結尾的網域,Caddy 將使用自動續訂的自簽憑證。當您第一次執行此操作時,您可能需要輸入密碼,因為 Caddy 嘗試將其 CA 的根憑證安裝到您的信任儲存區中。 - 如果您使用任何其他網域名稱,Caddy 將嘗試獲取公開信任的憑證;請確保您的 DNS 記錄指向您的機器,並且端口 80 和 443 對公眾開放並指向 Caddy。
如果您沒有指定端口,Caddy 預設為 HTTPS 的 443 端口。在這種情況下,您還需要綁定到低端口的權限。以下是在 Linux 上執行此操作的幾種方法
- 以 root 身分運行 (例如
sudo -E
)。 - 或者運行
sudo setcap cap_net_bind_service=+ep $(which caddy)
以授予 Caddy 此特定功能。
這是最基本的 caddy reverse-proxy
命令,可為您提供 HTTPS
caddy reverse-proxy --to :9000
然後試試看
curl -v https://127.0.0.1
您可以使用 --from
標誌自訂主機名稱
caddy reverse-proxy --from example.com --to :9000
如果您沒有綁定到低端口的權限,您可以從更高的端口進行代理
caddy reverse-proxy --from example.com:8443 --to :9000
如果您正在使用 Caddyfile,只需將第一行更改為您的網域名稱,例如
example.com
reverse_proxy :9000
從代理到後端的 HTTPS
如果後端支援 TLS,Caddy 也可以在自身和後端之間使用 HTTPS 進行代理。只需在您的後端地址中使用 https://
caddy reverse-proxy --from :2080 --to https://127.0.0.1:9000
這要求後端的憑證受到運行 Caddy 的系統的信任。(除非明確配置,否則 Caddy 不信任自簽憑證。)
當然,您也可以在兩端都使用 HTTPS
caddy reverse-proxy --from example.com --to https://example.com:9000
這提供了從客戶端到代理以及從代理到後端的 HTTPS 服務。
如果您要代理到的主機名稱與您要代理來源的主機名稱不同,則需要使用 --change-host-header
標誌
caddy reverse-proxy \
--from example.com \
--to https://127.0.0.1:9000 \
--change-host-header
預設情況下,Caddy 會將所有 HTTP 標頭保持不變地傳遞,包括 Host
,並且 Caddy 從 Host 標頭派生 TLS ServerName。 --change-host-header
將 Host 標頭重置為後端的標頭,以便 TLS 握手可以成功完成。在上面的範例中,它將從 example.com
更改為 localhost:9000
(並且 localhost
將在 TLS 握手中使用)。