Skip to content
Эта страница переведена с помощью ИИ и может содержать неточности. Помогите улучшить перевод на GitHub.

Вышла 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 + nginxGately
Обратный прокси HTTPS, keep-alive, ответы по 1 КБ14 767 req/s26 434 req/s
Новое TLS-соединение на каждый запрос2 557 req/s3 448 req/s
Ответы по 1 МБ1 053 MB/s1 585 MB/s
Сквозная передача TLS-потока по SNI2 927 MB/s4 962 MB/s
Сквозная передача по SNI, новых соединений в секунду6 334 /s6 266 /s

По памяти Gately занимает около 110 МБ, а haproxy и nginx вместе — около 42 МБ. Методика, полные результаты и оговорки — в README.

Перед обновлением ​

  • Docker: скачайте новый образ и пересоздайте контейнер. Бинарный файл: замените исполняемый файл и перезапустите службу.
  • Версии до v0.5.2 не понимают правила маршрутизации по SNI. Перед откатом отключите или удалите их: старая версия считает их обычным пробросом, а правило без цели по умолчанию приводит к её падению при первом же соединении.
  • При переходе с haproxy сначала остановите haproxy, а потом включайте правило Gately: слушать порт может только одна программа.

Вопросы и предложения — в GitHub Issues или в группе Telegram.

Распространяется по лицензии Apache-2.0.