Вышла Gately v0.5.2
20 октября 2026 г.
У публичного 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 — в разделе Проброс портов.
Веб-службы могут заменить nginx
- Бэкенды по путям: префикс пути можно направить на другой набор бэкендов или добавить заголовки запроса только для этого пути, как
locationв nginx; - Внешняя аутентификация: проверка доступа передаётся Authelia или похожему сервису, как
auth_request, и можно защитить только пути вроде/admin; - HTTPS-бэкенды получают посещаемый домен в SNI: это нужно, когда бэкенд маршрутизирует по SNI, например
vhost_httpsв frp; {host}в редиректах: одно правило сhttps://{host}переводит HTTP на HTTPS для всех доменов;- Статические сайты: адреса без расширений (VitePress и подобные), своя страница 404 и заголовки ответа;
- Изменение сайта больше не перезапускает слушатель: открытые соединения (включая WebSocket) не обрываются, статистика сохраняется, а при ошибочной новой конфигурации продолжает работать старая.
Соответствие настроек nginx описано в разделе «Замена haproxy и nginx» на странице Веб-службы.
Общие пользователи: TOTP и единый вход
Добавьте общих пользователей в разделе «Веб-службы → Глобальные настройки», включите TOTP для каждого (сканированием QR-кода) и задайте домен единого входа, например example.com, чтобы вход на одном сайте действовал на всех сайтах этого домена. Сайту достаточно отметить «Использовать общих пользователей». Если Authelia нужна только для этого, запускать её больше не обязательно: всё встроено.
Производительность
haproxy + nginx и Gately сравнивались на одной машине, каждому выделено 2 ядра CPU, конфигурация взята с реального сервера (90 доменов, протокол PROXY v2):
| Сценарий | haproxy + nginx | Gately |
|---|---|---|
| Обратный прокси HTTPS, keep-alive, ответы по 1 КБ | 14 767 req/s | 26 434 req/s |
| Новое TLS-соединение на каждый запрос | 2 557 req/s | 3 448 req/s |
| Ответы по 1 МБ | 1 053 MB/s | 1 585 MB/s |
| Сквозная передача TLS-потока по SNI | 2 927 MB/s | 4 962 MB/s |
| Сквозная передача по SNI, новых соединений в секунду | 6 334 /s | 6 266 /s |
По памяти Gately занимает около 110 МБ, а haproxy и nginx вместе — около 42 МБ. Методика, полные результаты и оговорки — в README.
Перед обновлением
- Docker: скачайте новый образ и пересоздайте контейнер. Бинарный файл: замените исполняемый файл и перезапустите службу.
- Версии до v0.5.2 не понимают правила маршрутизации по SNI. Перед откатом отключите или удалите их: старая версия считает их обычным пробросом, а правило без цели по умолчанию приводит к её падению при первом же соединении.
- При переходе с haproxy сначала остановите haproxy, а потом включайте правило Gately: слушать порт может только одна программа.
Вопросы и предложения — в GitHub Issues или в группе Telegram.