Skip to content
此頁面由 AI 翻譯,內容可能有疏漏。歡迎到 GitHub 協助改進。

Gately v0.5.2 發布 ​

2026 年 10 月 20 日

一個公網 IP 只有一個 443,VPN、網站、各類代理都想用它。以前的做法是在前面放 haproxy 或 nginx stream 依網域分流,再在後面放 nginx 做反向代理,三個程式各有一份設定。v0.5.2 讓 Gately 一個程式做完這些事:依網域分流、反向代理、TOTP 登入,而且效能不輸 haproxy + nginx。

下載 v0.5.2 · GitHub Release

SNI 分流:多個服務共用 443 ​

連接埠轉發新增「SNI 分流」模式(來自 Telegram 群組裡的使用者需求,#3):

  • 讀取 TLS 握手裡的網域,依網域把整條連線透傳到不同後端,TLS 不在這裡解密,憑證仍放在後端;
  • 網域支援精確符合、*.example.com 萬用字元與 *;沒有符合、沒有 SNI 或不是 TLS 的連線交給預設目標,沒有預設目標則關閉;
  • 每條路由單獨設定 PROXY 協定 v1 / v2,後端能取得真實用戶端位址;
  • 卡片上顯示每條路由與預設目標收到的連線數。

詳見 連接埠轉發,裡面有一個取代 haproxy 的完整範例。

Web 服務可以取代 nginx ​

  • 分路徑後端:某個路徑前綴送到另一組後端,或只給這個路徑附加請求標頭,相當於 nginx 的 location;
  • 轉發認證:把認證交給 Authelia 等外部服務,相當於 auth_request,可只保護 /admin 這樣的路徑;
  • HTTPS 後端依造訪網域傳送 SNI:後端依 SNI 分流時(例如 frp 的 vhost_https)需要;
  • 重新導向支援 {host}:https://{host} 一條規則就能把所有網域的 HTTP 跳轉到 HTTPS;
  • 靜態站台:無副檔名網址(VitePress 等)、自訂 404 頁面、回應標頭;
  • 修改站台不再重新啟動監聽:已建立的連線(含 WebSocket)不會中斷,統計資料保留,新設定無效時繼續使用舊設定。

對應關係見 Web 服務 裡的「取代 haproxy 與 nginx」。

共用使用者:TOTP 與單一登入 ​

在「Web 服務 → 全域設定」新增共用使用者,可為每個使用者啟用 TOTP 兩步驟驗證(掃描 QR 碼綁定),再設定單一登入網域(例如 example.com),在任一站台登入後同網域站台無需再登入。站台只需勾選「使用共用使用者」。不想再單獨部署 Authelia 的人,可以直接用它。

效能 ​

在同一台機器上、各限制 2 個 CPU 核心、依真實伺服器的設定(90 個網域、PROXY 協定 v2)比較 haproxy + nginx 與 Gately:

情境haproxy + nginxGately
HTTPS 反向代理,長連線,1 KB 回應14,767 req/s26,434 req/s
每個請求新建 TLS 連線2,557 req/s3,448 req/s
1 MB 回應1,053 MB/s1,585 MB/s
SNI 透傳 TLS 資料流2,927 MB/s4,962 MB/s
SNI 透傳新建連線速率6,334 /s6,266 /s

記憶體方面,Gately 約 110 MB,haproxy 與 nginx 合計約 42 MB。測試方法、完整資料與注意事項見 README。

升級提示 ​

  • Docker:拉取新映像檔後重建容器即可;執行檔:替換執行檔後重新啟動。
  • v0.5.2 之前的版本不認得 SNI 分流規則。降級前請先停用或刪除這些規則:舊版會把它們當作一般轉發,沒有預設目標的規則在第一個連線到來時會讓程式當掉。
  • 接替 haproxy 時,先停止 haproxy 再啟用 Gately 的規則,同一個連接埠只能由一個程式監聽。

有問題或建議,歡迎到 GitHub Issues 或 Telegram 群組 交流。

以 Apache-2.0 授權條款開源發布。