跳至主要内容

Reverse Proxy

當我們的 Homelab 越來越龐大,架設的服務也越來越多時(例如:NAS、Jellyfin、Home Assistant、Vaultwarden...),一個幸福的煩惱就出現了:

  • 「我有這麼多的伺服器,但對外的 Public IP 只有一個,要怎麼讓它們都能從外面連線?」
  • 「難道我需要記住 123.45.67.89:8096、123.45.67.89:7821 這種又醜又難記的 IP 和 Port 嗎?」
  • 「要怎麼為每一個伺服器都加上 HTTPS 的安全鎖頭?一個一個設定也太累了吧!」

如果你有以上這些困擾,那麼恭喜你,你需要的正是——反向代理 (Reverse Proxy)。

什麼是 Reverse Proxy?​

我們可以把它想像成一棟「辦公大樓的總機/保全」。

  • 我們的 Public IP,就是這棟辦公大樓唯一的「門牌地址」。
  • 我們架設的各種服務 (Jellyfin、NAS 等),就像大樓裡的不同「公司部門」(例如:影音部、檔案部)。
  • 每個服務的內部 IP 和 Port,就是這些部門所在的「樓層和房間號碼」。

在沒有總機的情況下,訪客必須自己記住每個部門的房間號碼才能找到地方,非常麻煩也不安全。

而反向代理,就是我們聘請來的這位專業總機。所有訪客(也就是來自外面網路的連線)都先到一樓的總機櫃檯。

訪客只需要說:「你好,我要找『影音部』 ( 例如是jellyfin.ourdomain.com)」。

總機就會幫他查詢、登記(處理 SSL 加密),然後把他導引到正確的樓層與房間 ( 例如是192.168.1.10:8096)。整個過程中,訪客完全不需要知道內部的房間號碼,一切都由總機處理。

為什麼我們需要 Reverse Proxy?​

集中管理​

有了 Reverse Proxy,我們不再需要為每一個伺服器在路由器上設定 Port Forwarding。我們只需要把最常用到的兩個 Port:80 (HTTP) 和 443 (HTTPS) 指向反向代理主機即可。

所有來自外部的流量都由它統一接收,再根據不同的網域名稱 (Domain Name),轉發給後端對應的伺服器。這大大簡化了我們的網路設定,也縮小了對外暴露的攻擊面。

自動化的 SSL/TLS 加密 (HTTPS)​

要讓網站變成 https:// 安全連線,需要申請 SSL 憑證。如果我們有 10 個 Server,你不會想要手動申請 10 次,每三個月還要手動更新 10 次。

所以 Reverse Proxy 工具能幫我們解決這個問題,可以自動連線到 Let's Encrypt 做設定,幫我們所有的網域全自動地申請、安裝、甚至到期前自動續簽 SSL 憑證。我們只需要設定一次,就能放一邊減少維護的時間。

提升安全性與彈性​

  • 隱藏內部架構:外部使用者只能看到 Reverse Proxy,無法得知我們後端服務的真實 IP 和 Port,能保護內部網路結構。
  • 負載平衡:如果未來我們的服務規模變大,有兩三台主機一起跑,Reverse Proxy 可以將流量平均分配到後端的主機上。
  • 方便維護:如果我們想把 Jellyfin 從 A 主機搬到 B 主機,只需要在設定裡將轉發的內部 IP 修改一下就好,對外的網址完全不受影響。

要如何選擇 Reverse Proxy 工具?​

在 Homelab 中,最受歡迎的有以下幾個選擇:

Nginx Proxy Manager​

建立於 Nginx ,套上圖形化介面 (GUI),所有設定都能在網頁上輕鬆完成,很好上手。最適合剛入門的初學者,或是不想手動編輯複雜設定檔的使用者。

Traefik​

與 Docker 整合的很完整。能透過 Docker 的 Labels (標籤) 自動偵測新服務並建立轉發規則,網頁能監控流量。

Caddy​

以一個 Caddyfile 設定檔完成所有功能。

Pangolin​

一個非常新的軟體,整合了 Traefik 與 WireGuard 可以做一些進階的安全網路功能。