Zoraxy v3 – 適合新手的反向代理伺服器
Toby
Toby

最近我一直在進行相當多的 Zoraxy 更新。對於從未聽過 Zoraxy 的人來說,它是我的開源反向代理伺服器 (Reverse Proxy Server)。可以部署在你的 homelab 或server / NAS 裡面。 如果你對 Zoraxy 如何運作沒有興趣,單純是來找一個可以在 Windows 和 Linux 上運行的 Reverse Proxy Server,請按這裡

v3 的新功能?

嗯,如果你之前使用過 Zoraxy v2,每次打開 Web 管理界面,你都會感到一陣沮喪的感覺。這是因為在開發 v2 的過程中,我沒有多餘的時間仔細考慮配色方案或設計一個具吸引力的界面配色(然而作為開源項目來說,這界面已經算是到達夠好 + 能用的設計)。

v2 homepage
v2 的代理清單

現在 v3 長這個樣子

除了界面更新之外,Zoraxy 還添加了大量新功能,以 optimize proxy core 的功能(或者我可以說,因為有太多 user 是從 Nginx Proxy Manager(NPM)轉過來用 Zoraxy,所以有一些部分如果盡量接近 NPM 的設計會省下我很多處理 issue 的麻煩)。一般來說,這不是 NPM 的替代品,而更像是一個讓你更容易在測試和debug 時切換 endpoint 的 Reverse Proxy。但無論如何,我不介意人們提出感覺像 NPM 的 enhancement issues。

Default Site

在 Zoraxy v3 中,我們新增了對 Default Site 和多個 host name 的支援。 Zoraxy 的前身(名為“Web Proxy”,是 ArozOS 系統的一個子服務)設計僅用於處理單一域名的反向代理,v2 版本添加了對子域和其他主機名的支援,但由於是沒經過設計加進去的,所以對 user 來說有夠混亂(

使用者對 “Proxy ”、“Subdomain” 和 “Proxy Root” 的設定感到困惑然後又跑來開 issue。這就是為什麼在 v3 的設計中,我設計一個新的界面和設置邏輯。有了Default Site 的選項(對,就是 NPM 那個),那習慣用 NPM 的人可以輕鬆地切換到 Zoraxy 了。(順帶省下了我很多解釋東西怎樣用的時間)

Default Site 提供 4 個選項供選擇。對於新手來說,你可能想要使用內部靜態網頁伺服器,在使用 “Static Web Server” 功能時將一個 “index.html” 文件作為你的網站首頁。這更像是傳統的 Apache 的用法,如果在 apache.conf 中沒有對應的 Virtual Host,所有的路由都會進入內置的靜態網頁伺服器,並從你的 /var/www/html 資料夾抓檔案來回應 request。

Redirection 和 404 Not Found 用起來也相對直接。對於 Redirection (重定向),你可以輸入要重定向的目標域名/IP 地址。在要將舊的(子)域名指向新域名,或者直接阻止那些未知/過時子域名的請求時滿有用的。

Wildcard 域名證書與 SNI

在 v3 中,我們 implement 了 TLS/SSL 證書查找邏輯中的 SNI。Zoraxy SNI 與其他 implementation 的區別在於,它不需要用戶輸入來將證書與特定主機名“鏈接”起來,而是會自動掃描並 serve 出對應的 TLS certificate。

在 v2 中,用戶需要手動為每個證書設置與匹配的域名。例如,如果你有一個證書可以涵蓋 a.example.com 和 b.example.com,你需要手動將其匹配關鍵字設置為 “example.com”,才能使這個域名的 TLS 加密正常工作(不然會出現 self sign certificate error)。現在有了 Zoraxy v3 的自動證書查找邏輯,你不需要設定任何東西。只需上傳你的證書(或使用內置的 ACME 工具從你選擇的 CA 生成一個),Zoraxy 將自動解析並選擇正確的 certificate。唯一的限制是對於包含多個主機名的證書(例如 domain.com 和 anotherdomain.com),速度會稍微慢一些(可能需要 O(n) 的時間複雜度來檢查系統中的所有證書),但對於個人/homelab 用途而言已經足夠了。

存取規則(Access Filters)

在 Zoraxy v3.0.2 中,引入了一個獨立的主機規則訪問篩選器(Access Rules)。這是 Zoraxy 中的另一個很酷的功能,每個代理規則都有自己的訪問篩選器,篩選器本身還包括國家代碼和/或 IP 地址的黑名單/白名單。


與 v2 中應用 Global Filter 規則相比,v3 使用了每個 Proxy Host Rule 獨立 Access Filter 的設計,這允許每個代理主機名都有不同的訪問 Access Controller 。我自己是沒在用啦,畢竟我只在我的伺服器上托管一個單一域名,但似乎很多用戶在 Zoraxy 開源這一年多的時間裡都在 request 這個功能。因此由於那些 request email 實在太煩了所以我決定把它加進去(

對於那些仍然喜歡使用 Global Access Rule 設計的人來說,你可以修改“默default” filter。Default filter 的工作方式與以前的 Global Access Filter 差不多是相同的,所有 Proxy Host 都預設使用“default” access rule 作為 access controller。

Alias (主機名稱別名)

在 Zoraxy v3.0.2 中,我們新增了另一個很酷的功能:能給 Proxy Host Alias 名稱的功能。用戶很常抱怨在 Zoraxy 上無法創建 host name alias (主機名別名)。因為所以現在我們支持別名主機名了!你可以編輯現有的HTTP proxy rule,並添加 alias 以共用同一個 reverse proxy router。

但是,這裡有一個取捨:使用 alias 比直接命中主機名解析要慢一些(這顯然很合理,因為它需要 iterate 檢查是否有任何主機名或帶有 wildcard 的主機名與 request header 對應)。所以就我個人而言,由於我只有一個域名,我會比較常增加更多的 HTTP Proxy Hostname 或 Redirect,而不是使用 alias。

Redirection Regex 支援

同時,由於對於複雜 Redirect 規則的需求很高,在 Zoraxy v3.0.1 中,我們引入了重定向正則表達式(Regex,我也是第一次知道 Regrex 有中文。。。)支持。如果啟用了這個功能,你可以在設置重定向 URL 時使用正則表達式。

這功能對我來說並不太有用(因為我是那種認為正則表達式就像魔法咒語的人),但也許有人會覺得它有用(?

Forward Proxy

很有趣的是,Zoraxy 也可以用作轉發代理!如果你不想設置 VPN,並且只想在旅行時訪問一些網站,你可以將 Zoraxy 用作類似 Web VPN 伺服器的東西。這個功能被稱為“轉發代理” (Forward Proxy),你可以在大多數現代瀏覽器中找到轉發代理設置。只需確保你已在 NAT 路由器(和 Docker 容器)上啟用了端口轉發,這樣你就可以使用你指定的端口連接到轉發代理伺服器。


Wake-On-LAN

在 Zoraxy v3 中,我還加入了 Wake-On-LAN 工具。這有助於在發生停電並且你的 UPS 通知所有伺服器關閉後,遠端啟動你的伺服器集群。這個功能設計是為了那些使用小型 PC 作為軟由器的設置,並且在停電期間不會關閉(可能通過 UPS 提供電源之類的,也可以是有電之後自動回復的 setup)。這個 node 上使用 Zoraxy 將可用作在電源恢復時啟動集群的 kick start node。

如果你有安裝了”ArozOS” 的節點,你更可以輕鬆將所有節點添加到 Zoraxy 的 WoL 表中(透過 mDNS 自動掃描),並一個一個進行遠程開機。

總結

大概就是這樣了。如果你有興趣了更多,可以去下面兩個網站看看:

https://zoraxy.arozos.com/

https://github.com/tobychui/zoraxy