mirror of
https://github.com/Vateron-Media/XC_VM.git
synced 2026-10-17 12:02:55 +02:00
The line-by-line web translator reordered words inside `**bold**` spans and misplaced/dropped the markers, producing `**LB` or `****` (empty bold). Mask each `**...**` as ONE atomic sentinel: translate the inner text on its own, then store the whole balanced `**inner**` — the engine never sees the markers and cannot reorder or collapse them. Also harden the anthropic prompt to keep emphasis balanced. Auto-prune: after translating, delete generated docs/ru files whose docs/en source no longer exists (renamed/removed) and drop now-empty dirs, so the tree mirrors docs/en 1:1 (removes the stale development/modules.md and guides/geoip-and-device-detection.md). Bump PROMPT_VERSION to 6 to invalidate the contaminated cache and regenerate docs/ru (0 broken bold spans remaining, aside from pre-existing multi-line bold that spans a soft line break).
102 lines
9.4 KiB
Markdown
102 lines
9.4 KiB
Markdown
# UCS Поддомены с подстановочными знаками интеграции для каждой строки
|
||
|
||
Эта функция присваивает каждому клиенту значение **стабильный, уникальный поддомен балансировщика нагрузки, основанный на их идентификаторе строки** (например, строка `10` → `10.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()`:
|
||
|
||
```php
|
||
// 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` |Вызывает конструктор перенаправления с использованием идентификатора строки|
|