Перейти к содержанию

UCS Поддомены с подстановочными знаками интеграции для каждой строки

Эта функция присваивает каждому клиенту значение стабильный, уникальный поддомен балансировщика нагрузки, основанный на их идентификаторе строки (например, строка 1010.example.com) при построении перенаправления потока.

Что здесь означает UCS? XC_VM только выдает имя хоста {line_id}.<zone>. "UCS" относится к восходящая/внешняя система — ваш DNS, CDN или пограничный прокси—сервер, который использует эти данные для каждой строки имена хостов для маршрутизации или применения политики для каждой строки. Панель сама по себе не реализует UCS; она передает ее.

Обзор

When a load-balancer (LB) server uses a wildcard domain and Serve Random IP / Domain is enabled, XC_VM replaces the wildcard. prefix with the authenticated line ID before redirecting the client.

Идентификатор строки Домен LB (настроен) Перенаправление домена
10 wildcard.example.com 10.example.com
42 wildcard.lb1.com 42.lb1.com

Каждая строка получает стабильный поддомен. UCS (или вышестоящий DNS/прокси-сервер) может перенаправлять *.example.com на правильный сервер или применять политики для каждой строки.

Требования

  1. Сервер балансировки нагрузки (не основной сервер), по крайней мере, с одним доменом, настроенным в соответствии с Домены и IP-адреса.
  2. Обслуживать случайный IP / домен включен на этом сервере (флажокrandom_ip на странице редактирования сервера).
  3. Запись в домене, начинающаяся с wildcard. (например, wildcard.example.com).
  4. DNS: подстановочная запись для базовой зоны (например, *.example.com), указывающая на LB или вашу границу UCS.
  5. TLS (при обслуживании по протоколу HTTPS): подстановочный сертификат *.example.com. Каждая строка преобразуется в другой хост (10.example.com, 42.example.com, ...), таким образом, сертификат для каждого хоста не будет работать без подстановочный знак означает, что эти клиенты получают ошибки TLS. Это самая распространенная ошибка при развертывании.

Установка

  1. Откройте Серверы → Редактировать на целевом сервере LB.
  2. В поле Домены и IP-адреса добавьте wildcard.example.com (используйте свою реальную зону).
  3. Включить Обслуживать случайный IP / домен.
  4. Сохраните сервер.
  5. Убедитесь, что DNS разрешает {line_id}.example.com для любого введенного вами идентификатора строки (wildcard DNS или UCS automation).

Когда клиент проходит аутентификацию с помощью auth.php, XC_VM считывает идентификатор строки из $rUserInfo['id'] и передает его в конструктор URL-адресов перенаправления.

Когда Это применимо

The substitution runs only when all of the following are true:

  • Запрос аутентифицирован, и доступен идентификатор строки.
  • Обслуживать случайный IP / домен включено для выбранного LB.
  • Случайно выбранный домен из списка доменов сервера содержит подстроку wildcard..

Если клиент подключился, используя соответствующий заголовок Host, существующий хост сохраняется, а подстановочный знак пропускается.

Пример потока

  1. Домены сервера LB: wildcard.example.com, lb2.example.com
  2. Обслуживать случайный IP / домен: включено
  3. Client line ID: 10
  4. Auth выбирает wildcard.example.com из списка доменов
  5. URL-адрес узла перенаправления становится 10.example.com

Сложные случаи и подводные камни

  • Отсутствующий / неправильный подстановочный DNS-код — если *.zone не удается разрешить, клиент получает неразрешимую проблему. хост и поток завершаются сбоем. Проверьте с помощью dig 999.example.com перед выдачей строк.
  • Несколько доменов на LB — "Обслуживать случайный IP / домен" выбирает один домен случайным образом. Если pick - это запись, не содержащаяwildcard., никакой замены не происходит, и клиент получает этот простой хост. Следите за тем, чтобы список доменов LB был единообразным (все с подстановочными знаками или разбирайтесь в их сочетаниях).
  • Меняется только метка хоста — при замене заменяется только сегмент wildcard.; URL-адрес схема (http/https) и путь не изменяются, поэтому развертывание HTTPS остается HTTPS (отсюда и сертификат требование, приведенное выше).
  • Host -пропуск матча — если клиент уже подключился с использованием хоста, соответствующего требованиям LB сконфигурированный домен, существующий хост сохраняется, а замена пропускается (например, клиент, который достигнутый wildcard.example.com непосредственно сохраняет его, а не становится 10.example.com).

Реализация

Логика живет в StreamRedirector::getStreamingURL():

// line_id : 10 => wildcard.lb1.com => 10.lb1.com
if ($rUserID && strpos($rDomain, 'wildcard.') !== false) {
    $rDomain = str_replace('wildcard.', $rUserID . '.', $rDomain);
}

Вызывается из Public/stream/auth.php с помощью $rUserID = $rUserInfo['id'] для прямых, VOD, timeshift и связанных с ними перенаправлений.

Записи

  • Используйте буквальный префикс wildcard. в строке домена; заменяется только этот сегмент.
  • Идентификатор строки - это внутренний идентификатор таблицы линии (users.id в streaming auth), а не имя пользователя.
  • Подстановка подстановочных знаков применяется только к URL-адресам перенаправления LB; она не изменяет имена плейлистов или хостов API, если только эти пути также не содержат getStreamingURL() с идентификатором строки.
  • Безопасность: идентификаторы строк становятся общедоступными в именах хостов (10.example.com), поэтому поддомен это поверхность перечисления — она показывает, что идентификаторы строк являются последовательными целыми числами. Это не секрет; не полагайтесь на поддомен для контроля доступа (auth по-прежнему выполняется в auth.php).

Связанные файлы

Файл Роль
src/Streaming/Delivery/StreamRedirector.php getStreamingURL() подстановка подстановочных знаков
src/Public/stream/auth.php Вызывает конструктор перенаправления с использованием идентификатора строки