Gately v0.5.2 发布
2026 年 10 月 20 日
一个公网 IP 只有一个 443,VPN、网站、各类代理都想用它。以前的做法是在前面放 haproxy 或 nginx stream 按域名分流,再在后面放 nginx 做反向代理,三个程序各有一份配置。v0.5.2 让 Gately 一个程序做完这些事:按域名分流、反向代理、TOTP 登录,并且性能不输 haproxy + nginx。
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 + nginx | Gately |
|---|---|---|
| HTTPS 反向代理,长连接,1 KB 响应 | 14,767 req/s | 26,434 req/s |
| 每个请求新建 TLS 连接 | 2,557 req/s | 3,448 req/s |
| 1 MB 响应 | 1,053 MB/s | 1,585 MB/s |
| SNI 透传 TLS 数据流 | 2,927 MB/s | 4,962 MB/s |
| SNI 透传新建连接速率 | 6,334 /s | 6,266 /s |
内存方面,Gately 约 110 MB,haproxy 与 nginx 合计约 42 MB。测试方法、完整数据与注意事项见 README。
升级提示
- Docker:拉取新镜像后重建容器即可;二进制:替换可执行文件后重启。
- v0.5.2 之前的版本不认识 SNI 分流规则。降级前请先停用或删除这些规则:旧版会把它们当作普通转发,没有默认目标的规则在第一个连接到来时会让程序崩溃。
- 接替 haproxy 时,先停止 haproxy 再启用 Gately 的规则,同一个端口只能由一个程序监听。
有问题或建议,欢迎到 GitHub Issues 或 Telegram 群 交流。