subscription.mdx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. ---
  2. title: Подписка
  3. description: Запуск сервера подписок 3x-ui — форматы base64/JSON/Clash, порты и пути, TLS, заголовки ответа и пользовательские шаблоны.
  4. icon: Rss
  5. ---
  6. **Подписка** — это единый URL, который возвращает все конфигурации клиента.
  7. Клиентские приложения периодически обновляют его, поэтому при изменении
  8. входящего соединения клиенты подхватывают изменения автоматически. Сервер
  9. подписок работает как **отдельный** сервер от панели.
  10. ## Включение и настройка
  11. Сервер подписок **включён по умолчанию** (`subEnable`). Настройте его в
  12. параметрах подписки панели:
  13. | Параметр | По умолчанию | Назначение |
  14. | ------------- | ------- | --------------------------------------------------------------- |
  15. | `subPort` | `2096` | Порт прослушивания (отдельный от панели). |
  16. | `subListen` | _(все)_ | Адрес привязки. |
  17. | `subPath` | _(случайный для каждой панели)_ | Базовый путь для необработанных URL подписок. |
  18. | `subDomain` | _(нет)_ | Публичный хост; если задан, сервер отвечает только для этого Host. |
  19. | `subCertFile` / `subKeyFile` | _(нет)_ | Сертификат + ключ TLS — когда заданы, сервер работает по **HTTPS**. |
  20. | `subEncrypt` | `true` | Кодировать тело необработанной подписки в base64. |
  21. | `subUpdates` | `12` | Рекомендуемый интервал обновления (часы), отправляемый клиентам. |
  22. URL подписки выглядит так:
  23. ```text
  24. https://<sub-host>:<sub-port>/<sub-path>/<sub-id>
  25. ```
  26. где `<sub-id>` — это **Sub ID** клиента.
  27. Один и тот же Sub ID отдаётся в нескольких форматах по разным путям — список
  28. **Base64** по `subPath` и конфигурация **JSON** (Xray-json) по пути JSON.
  29. Соберите URL и предпросмотрите оба тела здесь:
  30. <SubscriptionBuilder />
  31. ## Форматы вывода
  32. **Формат выбирается по пути**, у каждого свой переключатель включения:
  33. | Формат | Путь | Включается | Вывод |
  34. | --------------------- | --------- | ---------------- | --------------------------------------------------- |
  35. | **Необработанные ссылки** | `subPath` | всегда (если включён) | Список ссылок `vless://`, `vmess://`, … (закодированных в base64, когда включён `subEncrypt`). |
  36. | **JSON** | `subJsonPath` | `subJsonEnable` | Полные клиентские конфигурации Xray. |
  37. | **Clash / Mihomo** | `subClashPath` | `subClashEnable` | YAML-профиль. |
  38. В подписке появляются только включённые входящие соединения, использующие
  39. **VLESS, VMess, Trojan, Shadowsocks, WireGuard, AmneziaWG, MTProto, TUIC или Hysteria2**, упорядоченные по их индексу
  40. сортировки подписки (TUIC и AmneziaWG включаются в raw-ссылки и профили Clash/Mihomo, но исключаются из JSON-конфигов; MTProto включается в raw-ссылки). Запрос `subPath` с заголовком `Accept: text/html` (или
  41. `?html=1`) возвращает удобочитаемую информационную страницу вместо
  42. необработанного тела.
  43. ### Base64 vs JSON
  44. Тело **Base64** — это просто ссылки для обмена, объединённые через перевод
  45. строки и закодированные в стандартный base64 (переключается через `subEncrypt`).
  46. Тело **JSON** оборачивает каждого клиента в полную клиентскую конфигурацию
  47. Xray — фиксированный каркас (локальные входящие SOCKS/HTTP на 127.0.0.1, DNS, маршрутизация,
  48. policy) плюс исходящее соединение `proxy`, указывающее на входящее. 3x-ui
  49. выдаёт **единый объект конфигурации для одного клиента и массив для
  50. нескольких**, использует плоскую форму `settings` исходящего соединения
  51. (`address`/`port`/`id`, `level: 8`) и удаляет `sockopt` из `streamSettings`.
  52. ## Заголовки ответа
  53. Подписки возвращают стандартные заголовки, которые читают совместимые
  54. приложения:
  55. - **`Subscription-Userinfo`** — `upload`, `download`, `total` (байты; `total=0`
  56. означает без ограничений) и `expire` (Unix-секунды).
  57. - **`Profile-Update-Interval`** — интервал обновления в часах (`subUpdates`).
  58. - **`Profile-Title`**, **`Support-Url`**, **`Profile-Web-Page-Url`**,
  59. **`Announce`** — необязательный брендинг, отображаемый некоторыми клиентами.
  60. ## Пользовательские шаблоны страниц
  61. Укажите в `subThemeDir` папку с пользовательским шаблоном информационной
  62. страницы, чтобы оформить HTML-страницу подписки в фирменном стиле. Примечание
  63. для каждого клиента на каждой ссылке полностью шаблонизируется — см.
  64. [Ссылки для обмена → переменные примечаний](/docs/config/share-links#remark-template-variables).
  65. <Callout type="info">
  66. Разместите сервер подписок за TLS (задайте `subCertFile`/`subKeyFile` или
  67. [обратный прокси](/docs/operations/reverse-proxy)), чтобы содержимое подписки
  68. не передавалось в открытом виде.
  69. </Callout>