Обратный прокси на Go

unredirector

unRedirector направляет запросы к вашим сервисам, распределяет нагрузку и управляет доступом. Поддерживает TLS, WebSocket, WebDAV и gRPC.

Маршруты По имени хоста и пути URL
TLS + mTLS SNI, OCSP, certbot
/unRed Статус, трафик и диагностика
Страница /unRed/traffic: таблица запросов, ответов и объёма трафика по трём бэкендам.
Статистика трафика Интерфейс unRed · /unRed/traffic
Открыть снимок ↗

Что это

Возможности

unRed объединяет доступ к API, веб-приложениям и файловым хранилищам. Правила маршрутизации и настройки сервисов хранятся в JSON.

Маршрутизация

Направляйте запросы по имени хоста и пути URL. Задавайте отдельные настройки для сервисов и раздавайте локальные файлы.

Балансировка

Распределяйте запросы между серверами с учётом их веса и доступности. Подключайте резервные серверы при отказе основных.

TLS и доступ

Настраивайте сертификаты и их продление через certbot. Проверяйте клиентов через mTLS, Bearer-токены или внешнюю службу аутентификации.

Кэширование

Кэшируйте ответы с учётом Cache-Control и Vary. Обновляйте их в фоне и очищайте кэш через API.

Протоколы

HTTP/1.1 и HTTP/2 по TCP, входящий HTTP/3 по QUIC/UDP. WebSocket, gRPC и 103 Early Hints. Для WebDAV доступны прозрачная передача ответов и преобразование статусов в 200.

Диагностика

Проверяйте статус, журналы, трафик, кэш и доступность серверов на служебных страницах /unRed.

Быстрый старт

Первый маршрут

Пример направляет запросы к app.local на сервис 127.0.0.1:3000. Для запуска нужны бинарник с действующей лицензией, работающий сервис и TLS-сертификат для app.local.

1

Подготовьте файлы

Сохраните пример в config.json. Поместите сертификат и ключ в certs/app.local.crt и certs/app.local.key.

2

Запустите прокси

В каталоге с конфигурацией выполните ./unred.lin -config ./config.json. Подробнее о сборке и запуске.

3

Проверьте маршрут

Добавьте 127.0.0.1 app.local в файл hosts. Откройте https://app.local:9443/ в браузере, который доверяет сертификату.

config.json · локальный запуск
{
  "listen-http": "127.0.0.1:8180",
  "listen-https": "127.0.0.1:9443",
  "dropPrivileges": { "drop": false },
  "certs": {
    "app.local": {
      "cert": "certs/app.local.crt",
      "key": "certs/app.local.key"
    }
  },
  "rules": {
    "app.local": "http://127.0.0.1:3000"
  }
}
Схема потока запросов через unRed

Архитектура

Обработка запроса

Приём соединения

Прокси принимает HTTPS-соединение и выбирает сертификат по имени сервера (SNI). Настройка clientTLS включает проверку сертификата клиента.

Проверка доступа

Настройки auth определяют способ аутентификации для хоста: Bearer-токен либо Basic с проверкой через внешнюю программу или службу.

Выбор сервера

Маршрут выбирается по наиболее длинному совпадающему префиксу хоста и пути. Балансировщик учитывает вес и доступность серверов.

Передача ответа

Прокси передаёт ответ клиенту. Для gRPC сохраняет завершающие заголовки (trailers). Для WebDAV применяет выбранный режим: прозрачный или с преобразованием статуса в 200.

Развитие проекта

В разработке

Планируемые возможности. Полный список и текущий статус.

Перенаправление UDP

Передача UDP-пакетов другим сервисам, включая STUN, TURN и RTP.

HTTP/2 server push

Отправка ресурсов клиенту до отдельного запроса.

Преобразование ответов

Правила изменения HTML и другого содержимого ответов.

Общее состояние экземпляров

Синхронизация лимитов запросов и доступности серверов между процессами unRed.

Единая панель мониторинга

Маршруты, трафик и состояние серверов на одном экране.

Метрики Prometheus

Экспорт показателей для внешнего мониторинга.