Skip to content

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 二次验证(扫码绑定),再设置单点登录域(例如 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 许可证开源发布。