Настройка

Примеры конфигурации

Выберите подходящий пример и замените домены, адреса бэкендов, секреты и пути к сертификатам на свои. Скопируйте JSON в отдельный файл конфигурации. Для запуска нужны готовый бинарник с действующей лицензией и TLS-сертификат для входящих соединений. Подготовка и запуск.

Конфигурация

Типовые задачи

Проксирование запросов, распределение нагрузки, защищённый доступ и передача WebDAV- и TURN-трафика.

1. Один бэкенд

Запросы к app.local направляются на локальный сервер. Страницы состояния и нагрузки доступны по адресам /unRed/Status и /unRed/Load без дополнительных параметров.

examples/minimal-reverse-proxy.json
{
  "listen-http": ":8180",
  "listen-https": ":9443",
  "dropPrivileges": {
    "drop": false
  },
  "rules": {
    "app.local": "http://127.0.0.1:3000"
  }
}

2. Балансировка и проверка доступности

Два основных сервера с весами 80 и 20, один резервный. Доступность проверяется по ошибкам соединения и ответам на запросы к /health.

examples/balancer-health.json
{
  "listen-http": ":80",
  "listen-https": ":443",
  "rules": {
    "api.example.com": "api-pool"
  },
  "balancer-weight": {
    "api-pool": {
      "primary": {
        "http://10.0.0.11:8080": 80,
        "http://10.0.0.12:8080": 20
      },
      "backup": {
        "http://10.0.0.21:8080": 100
      }
    }
  },
  "balancerHealth": {
    "passive": { "maxFails": 3, "failTimeoutMs": 30000 },
    "active": {
      "enabled": true,
      "path": "/health",
      "intervalMs": 5000,
      "timeoutMs": 2000,
      "expectStatus": [200, 204]
    }
  }
}

3. TLS и авторизация

Входящий HTTPS, доступ по Bearer-токену и проверка TLS-сертификата бэкенда.

examples/secure-auth-tls.json
{
  "listen-https": ":443",
  "listen-http": ":80",
  "certs": {
    "api.example.com": {
      "cert": "/etc/unred/certs/api.example.com.crt",
      "key": "/etc/unred/certs/api.example.com.key",
      "ocsp": { "auto": true, "refresh_sec": 3600 }
    }
  },
  "backendTLS": {
    "verify": true,
    "caFile": "/etc/unred/upstream-ca.pem"
  },
  "rules": {
    "api.example.com": "https://api.internal:8443"
  },
  "configs": {
    "api.example.com": {
      "auth": {
        "type": "bearer",
        "bearerToken": "replace-with-long-secret",
        "no-auth": { "paths": ["/health", "/.well-known/*"] }
      }
    }
  }
}

4. WebDAV: прозрачный режим

Для WebDAV-запросов клиент получает исходные финальные статусы, заголовки и тело ответа: 207 остаётся 207, 423 — 423. Имя пользователя и пароль из заголовка Basic проверяет внешний сервис. Замените адреса и файлы сертификатов на свои.

examples/webdav-passthrough.json
{
  "listen-https": ":9443",
  "listen-http": ":8180",
  "passthroughDAV": true,
  "rules": {
    "files.example.com/dav": "https://webdav-backend.internal:8443"
  },
  "backendTLS": {
    "verify": true,
    "caFile": "/etc/unred/upstream-ca.pem"
  },
  "configs": {
    "files.example.com": {
      "passthroughDAV": true,
      "auth": {
        "type": "remote-hostport",
        "remote": "auth.internal:8443",
        "scheme": "https",
        "responseUserHeader": "X-Auth-User",
        "check": {
          "url": "/auth/check",
          "method": "POST",
          "format": "basic-header",
          "okStatus": 200
        },
        "tls": {
          "caFile": "/etc/unred/auth-ca.pem"
        }
      }
    }
  },
  "webdavResponseMode": "transparent"
}

5. WebDAV: преобразование статусов в 200

Все финальные статусы WebDAV-ответов заменяются на 200, включая 207, 3xx и 4xx/5xx. Содержимое тела сохраняется. Ответы на HEAD и исходные 204/304 остаются без тела. Используйте этот режим, если клиент ожидает HTTP 200 независимо от результата операции. Для обычных WebDAV-клиентов выберите transparent.

WebDAV определяется по методу запроса или заголовку DAV бэкенда. Не добавляйте этот маршрут в passthrough_errors: совпавшее правило сохранит исходный статус. Отказы аутентификации, ограничения запросов и ошибки соединения сохраняют свои коды; статусы gRPC не изменяются. Правила применения.

examples/webdav-convert-200.json
{
  "listen-https": ":9443",
  "listen-http": ":8180",
  "passthroughDAV": true,
  "webdavResponseMode": "convert-200",
  "certs": {
    "files.example.com": {
      "cert": "/etc/unred/certs/files.example.com.crt",
      "key": "/etc/unred/certs/files.example.com.key"
    }
  },
  "rules": {
    "files.example.com/dav": "https://webdav-backend.internal:8443"
  },
  "backendTLS": {
    "verify": true,
    "caFile": "/etc/unred/upstream-ca.pem"
  }
}

6. TURN по TCP для WebRTC

TCP-соединения на портах 3478 и 5349 передаются TURN-серверу, например coturn или pion. Это позволяет WebRTC-клиентам использовать TURN по TCP в сетях с ограничениями. Передача UDP — в разработке.

examples/tcp-turn-passthrough.json
{
  "listen-https": ":9443",
  "listen-http": ":8180",
  "rules": {
    "calls.example.com": "https://justcall-backend:8443"
  },
  "tcpRelay": {
    "listeners": {
      ":3478": { "target": "turn.internal:3478" },
      ":5349": { "target": "turn.internal:5349", "dialTimeoutMs": 3000 }
    }
  }
}

7. HTTP/3 для локального сервиса

Клиенты подключаются к unRed по HTTP/3 на UDP 9443 или по HTTP/1.1 и HTTP/2 на TCP 9443. Запросы передаются локальному HTTP-сервису на порту 3000. Замените имя хоста и файлы сертификата на свои.

Откройте UDP 9443 в межсетевом экране и NAT. Внешний UDP-порт должен совпадать с объявленным в Alt-Svc; иначе отключите advertiseAltSvc. Изменение параметров HTTP/3 требует перезапуска. Параметры и диагностика HTTP/3.

examples/http3.json
{
  "listen-https": ":9443",
  "listen-http": ":8180",
  "http3": {
    "enabled": true,
    "advertiseAltSvc": true,
    "maxStreamsPerConn": 100,
    "idleTimeoutSec": 30
  },
  "certs": {
    "app.example.com": {
      "cert": "/etc/unred/certs/app.example.com.crt",
      "key": "/etc/unred/certs/app.example.com.key"
    }
  },
  "rules": {
    "app.example.com": "http://127.0.0.1:3000"
  }
}

Эксплуатация

Дополнительные настройки

Проверка сертификатов, разделение конфигурации и доступ к служебным страницам.

1
Проверка сертификатов бэкендов

Включите backendTLS.verify. Для собственного центра сертификации укажите caFile, для взаимной TLS-аутентификации — clientCert и clientKey. По умолчанию сертификаты бэкендов не проверяются.

2
Отдельные файлы для доменов

Адреса прослушивания и общие настройки безопасности оставьте в основном файле. Маршруты, авторизацию и сертификаты доменов вынесите в JSON-файлы каталога config-dir. Для перечитывания конфигурации отправьте процессу сигнал SIGHUP.

3
Доступ к служебным страницам

В разделе /unRed доступны состояние сервера, сведения о сертификатах, кеше, бэкендах и трафике. Ограничьте доступ к этим страницам сетевыми правилами или авторизацией.

4
Для API включайте passthrough_errors

Для сохранения исходных статусов и JSON/XML тела добавьте префикс в passthrough_errors. Для DAV-автодетекции включите passthroughDAV с webdavResponseMode: "transparent". Явный префикс приоритетнее convert-200; эти режимы нельзя совместить для одного ответа.