Publicado Gately v0.5.2
20 de octubre de 2026
Una IP pública tiene un solo puerto 443, y las VPN, los sitios web y los proxies lo quieren todos. La solución habitual es poner delante haproxy o nginx stream para enrutar por dominio y detrás nginx para el proxy inverso: tres programas y tres configuraciones. v0.5.2 permite que Gately lo haga todo en un único programa: enrutamiento por dominio, proxy inverso e inicio de sesión con TOTP, a una velocidad que está a la altura de haproxy + nginx.
Descargar v0.5.2 · GitHub Release
Enrutamiento SNI: varios servicios en el puerto 443
El reenvío de puertos tiene un nuevo modo, «Enrutamiento SNI» (lo pidió un usuario en el grupo de Telegram, #3):
- Lee el dominio del handshake TLS y pasa la conexión completa al backend elegido según el dominio. TLS no se descifra aquí, así que los certificados permanecen en los backends;
- Los dominios pueden ser exactos, un comodín
*.example.como*. Las conexiones sin coincidencia, sin SNI o que no son TLS van al destino predeterminado, y se cierran cuando no lo hay; - El protocolo PROXY v1 / v2 se configura por ruta, de modo que los backends reciben la dirección real del cliente;
- La tarjeta de la regla muestra cuántas conexiones ha recibido cada ruta y el destino predeterminado.
Consulta Reenvío de puertos para ver un ejemplo completo de cómo sustituir a haproxy.
Servicios web puede sustituir a nginx
- Backends por ruta: envía un prefijo de ruta a otro conjunto de backends, o añade cabeceras de petición solo para esa ruta, como un
locationde nginx; - Autenticación delegada: delega la autenticación en Authelia o un servicio similar, como
auth_request, y protege solo rutas como/admin; - Los backends HTTPS reciben como SNI el dominio visitado: necesario cuando el backend enruta por SNI, por ejemplo
vhost_httpsde frp; {host}en las redirecciones: una sola regla conhttps://{host}envía HTTP a HTTPS para todos los dominios;- Sitios estáticos: URL sin extensión (VitePress y similares), una página 404 personalizada y cabeceras de respuesta;
- Editar un sitio ya no reinicia el listener: las conexiones abiertas (incluido WebSocket) se mantienen, las estadísticas se conservan y, si la nueva configuración no es válida, la anterior sigue sirviendo.
Consulta «Sustituir haproxy y nginx» en Servicios web para ver cómo se trasladan los ajustes de nginx.
Usuarios compartidos: TOTP e inicio de sesión único
Añade usuarios compartidos en «Servicios web → Ajustes globales», activa TOTP para cada uno (escaneando un código QR) y define un dominio de inicio de sesión único como example.com, para que iniciar sesión en un sitio sirva para todos los sitios bajo ese dominio. En cada sitio basta con marcar «Usar usuarios compartidos». Si prefieres no ejecutar Authelia solo para esto, ya viene integrado.
Rendimiento
haproxy + nginx y Gately comparados en la misma máquina, cada uno limitado a 2 núcleos de CPU, con la configuración de un servidor real (90 dominios, protocolo PROXY v2):
| Escenario | haproxy + nginx | Gately |
|---|---|---|
| Proxy inverso HTTPS, keep-alive, respuestas de 1 KB | 14.767 req/s | 26.434 req/s |
| Una conexión TLS nueva por cada petición | 2.557 req/s | 3.448 req/s |
| Respuestas de 1 MB | 1.053 MB/s | 1.585 MB/s |
| Paso SNI de un flujo TLS | 2.927 MB/s | 4.962 MB/s |
| Paso SNI, conexiones nuevas por segundo | 6.334 /s | 6.266 /s |
En memoria, Gately usa unos 110 MB y haproxy y nginx juntos unos 42 MB. El método, las cifras completas y las salvedades están en el README.
Notas de actualización
- Docker: descarga la nueva imagen y recrea el contenedor. Binario: sustituye el ejecutable y reinicia.
- Las versiones anteriores a v0.5.2 no entienden las reglas de enrutamiento SNI. Desactívalas o elimínalas antes de volver a una versión anterior: una versión antigua las trata como reenvío normal, y una regla sin destino predeterminado la hace fallar en la primera conexión.
- Al tomar el relevo de haproxy, detén haproxy antes de activar la regla de Gately, porque solo un programa puede escuchar en un puerto.
Las preguntas e ideas son bienvenidas en GitHub Issues o en el grupo de Telegram.