文件
a 專案

反向代理快速入門

本指南將向您展示如何快速啟動並運行一個生產就緒的反向代理,無論是否使用 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 握手中使用)。