Gately v0.5.2 est disponible
20 octobre 2026
Une IP publique n'a qu'un seul port 443, et les VPN, les sites web et les proxys le veulent tous. La solution habituelle place haproxy ou nginx stream en façade pour router par domaine, avec nginx derrière pour le proxy inverse : trois programmes, trois configurations. La v0.5.2 permet à Gately de tout faire dans un seul programme : routage par domaine, proxy inverse et connexion TOTP, à une vitesse qui tient la comparaison avec haproxy + nginx.
Télécharger la v0.5.2 · GitHub Release
Routage SNI : plusieurs services sur le port 443
La redirection de ports dispose d'un nouveau mode « Routage SNI » (demandé par un utilisateur du groupe Telegram, #3) :
- Il lit le domaine dans la négociation TLS et transmet toute la connexion au backend choisi selon ce domaine. Le TLS n'est pas déchiffré à cette étape : les certificats restent donc sur les backends ;
- Les domaines peuvent être exacts, un joker
*.example.comou*. Les connexions sans correspondance, sans SNI ou hors TLS vont vers la cible par défaut, et sont fermées s'il n'y en a pas ; - Le protocole PROXY v1 / v2 se règle par route, pour que les backends reçoivent l'adresse réelle du client ;
- La carte de la règle indique combien de connexions chaque route et la cible par défaut ont reçues.
Voir Redirection de ports pour un exemple complet de remplacement de haproxy.
Les Services Web peuvent remplacer nginx
- Backends par chemin : envoyez un préfixe de chemin vers un autre ensemble de backends, ou ajoutez des en-têtes de requête pour ce chemin uniquement, comme un
locationde nginx ; - Authentification déléguée : confiez l'authentification à Authelia ou à un service similaire, comme
auth_request, et protégez uniquement des chemins tels que/admin; - Les backends HTTPS reçoivent le domaine visité comme SNI : nécessaire quand le backend route selon le SNI, par exemple le
vhost_httpsde frp ; {host}dans les redirections : une seule règle avechttps://{host}redirige HTTP vers HTTPS pour tous les domaines ;- Sites statiques : URL propres (VitePress et similaires), page 404 personnalisée et en-têtes de réponse ;
- Modifier un site ne redémarre plus l'écouteur : les connexions ouvertes (WebSocket compris) restent actives, les statistiques sont conservées, et une nouvelle configuration invalide laisse l'ancienne en service.
Voir « Remplacer haproxy et nginx » dans Services Web pour la correspondance des réglages nginx.
Utilisateurs partagés : TOTP et authentification unique
Ajoutez des utilisateurs partagés dans « Services Web → Paramètres globaux », activez TOTP pour chacun (en scannant un QR code) et définissez un domaine d'authentification unique comme example.com : une connexion sur un site vaut alors pour tous les sites de ce domaine. Un site n'a qu'à cocher « Utiliser les utilisateurs partagés ». Si vous préférez ne pas faire tourner Authelia uniquement pour cela, la fonction est intégrée.
Performances
haproxy + nginx et Gately comparés sur la même machine, chacun limité à 2 cœurs CPU, avec la configuration d'un vrai serveur (90 domaines, protocole PROXY v2) :
| Scénario | haproxy + nginx | Gately |
|---|---|---|
| Proxy inverse HTTPS, keep-alive, réponses de 1 Ko | 14 767 req/s | 26 434 req/s |
| Une nouvelle connexion TLS par requête | 2 557 req/s | 3 448 req/s |
| Réponses de 1 Mo | 1 053 Mo/s | 1 585 Mo/s |
| Transmission SNI d'un flux TLS | 2 927 Mo/s | 4 962 Mo/s |
| Transmission SNI, nouvelles connexions par seconde | 6 334 /s | 6 266 /s |
Côté mémoire, Gately utilise environ 110 Mo, et haproxy et nginx environ 42 Mo à eux deux. La méthode, les chiffres complets et les réserves figurent dans le README.
Notes de mise à niveau
- Docker : récupérez la nouvelle image et recréez le conteneur. Binaire : remplacez l'exécutable et redémarrez.
- Les versions antérieures à la v0.5.2 ne comprennent pas les règles de routage SNI. Désactivez-les ou supprimez-les avant de revenir en arrière : une version plus ancienne les traite comme une redirection simple, et une règle sans cible par défaut la fait planter dès la première connexion.
- Pour prendre le relais de haproxy, arrêtez haproxy avant d'activer la règle Gately, car un seul programme peut écouter sur un port donné.
Questions et idées sont les bienvenues sur GitHub Issues ou dans le groupe Telegram.