Подписки
Marzban включает в себя уникальную возможность, предоставления конфигов для подключения пользователя в удобном формате - так называемая система подписки.
Основными плюсами использования данной системы, является обеспечние единой точки входа для пользователя и безшовность проводимых изменений, а так же множеством других.
Формат ссылки
Подписка доступна для пользователя по опредленному пути (ссылке), которая складывается из следующих частей:
Разберем составляющие этой ссылки:
XRAY_SUBSCRIPTION_URL_PREFIX
Префикс адреса подписки.
Значение задается в .env
Пример: "https://domain.com"
В случае, если Вы используете wildcard домены, Вы можете определить генерацию случайной строки (соли) для XRAY_SUBSCRIPTION_URL_PREFIX.
Пример: "https://*.domain.com"
При генерации получив случайную строку длиной 16 символов
Пример: "830aa395df41ae5a.domain.com"
или "b7559f58668ab457.domain.com"
XRAY_SUBSCRIPTION_PATH
Префикс адреса подписки.
Значение задается в .env
значение по умолчанию: sub
Пример: "sub"
JWT_TOKEN
Значение генерируется автоматически
JWT токен состоит из трех частей, разделенных точкой, закодированных с использованием Base64URL:
HEADER
Заголовок содержит метаданные о типе токена (JWT) и используемом алгоритме подписи (HMAC с SHA-256).
Пример:
После кодирования Base64URL:
PAYLOAD
Полезная нагрузка содержит claims с данными, закодированными в JWT. В этом случае, она включает:
- sub: имя пользователя
- access: права доступа
- iat: время выдачи токена в формате Unix timestamp
Пример:
После кодирования Base64URL:
SIGNATURE
Создается на основе закодированных заголовка, полезной нагрузки и секретного ключа с использованием указанного в заголовке алгоритма и служит для проверки целостности токена.
Пример:
Таким образом, полный JWT токен будет выглядеть следующим образом:
Токены передаются между клиентом и сервером для идентификации пользователя без необходимости постоянно хранить эту информацию на сервере.
KEY
С помощью обьявленных в конце ссылки ключей, Вы можете воспользоваться дополнительными возможностями
/info
Формат вывода: JSON
C помощью данного ключа Вы можете получить всю информацию о пользовательской подписке, включая все данные сущности user
этого пользователя.
/usage
Формат вывода: JSON
C помощью данного ключа Вы можете получить всю информацию о потребленном трафике пользователя, включая все данные узлов.
/CLIENT_TYPE
Доступные типы клиентов: sing-box
,clash-meta
,clash
,outline
,v2ray
, v2ray-json
Получение опредленного типа подписки, сгенерированного для указанного потребителя
Подписка
Система подписки, динамически отдает содержимое в зависимости от выполнения некоторых условий.
Ниже, мы рассмотрим все доступные варианты:
WEB
Получая в accept_header
значение "text/html"
, мы понимаем, что запрос к ссылке исходит от веб браузера,
предоставляя ему на выходе рендер шаблона по умолчанию (или заданного Вами, кастомного шаблона) в виде html файла.
Для применения собственного шаблона, Вам необходимо использовать 2 перменные в файле .env
:
CUSTOM_TEMPLATES_DIRECTORY
SUBSCRIPTION_PAGE_TEMPLATE
В данном виде шаблона для рендера используется шаблонизатор jinja, с полной поддержкой его синтаксиса.
Доступная сущность для взаимодействия: user
Пример:
V2ray
Доступный ключ /v2ray
.
При несовпадении наименования в заголовке user_agent
перечисленным, специфичным клиентам, мы понимаем,
что запрос к ссылке исходит от v2ray приложения, которому на выходе, мы предоставляем сгенерированный plain текст, c закодированными в base64 ссылками подключения
Дополнительно, будут переданны заголовки, которые, в свою очередь, в том или инном обьеме, будут интерпретированы клиентом.
profile-web-page-url
Заголовок включающий ссылку-подписки
Пример:
support-url
Заголовок включающий ссылку позволяющая пользователю перейти на соответствующую домашнюю страницу.
Для применения собственного значения, Вам необходимо задать перменную SUB_SUPPORT_URL
в файле .env
:
Пример:
profile-title
Имя профиля в кодировке base64 UTF8
Пример:
profile-update-interval
Интервал автоматического обновления файла конфигурации
Для применения собственного значения, Вам необходимо задать перменную SUB_UPDATE_INTERVAL
в файле .env
:
Пример:
subscription-userinfo
Информация о трафике и истечении срока действия
Значения генерируются автоматическии
Пример:
V2ray-json
Доступный ключ /v2ray-json
.
При запросе к ссылке с использованием ключа /v2ray-json
, на выходе, Вы получите сгенерированный json файл вида
Содержащий в каждом элементе массива полностью валидный json хоста, на основе базового или заданного Вами шаблона
Согласно утвержденного стандарта конфигурации json
Для применения собственного шаблона, Вам необходимо использовать 2 перменные в файле .env
:
CUSTOM_TEMPLATES_DIRECTORY
V2RAY_SUBSCRIPTION_TEMPLATE
Дополнительно, будут переданны заголовки, которые, в свою очередь, в том или инном обьеме, будут интерпретированы клиентом.
profile-web-page-url
Заголовок включающий ссылку-подписки
Пример:
support-url
Заголовок включающий ссылку позволяющая пользователю перейти на соответствующую домашнюю страницу.
Для применения собственного значения, Вам необходимо задать перменную SUB_SUPPORT_URL
в файле .env
:
Пример:
profile-title
Имя профиля в кодировке base64 UTF8
Пример:
profile-update-interval
Интервал автоматического обновления файла конфигурации
Для применения собственного значения, Вам необходимо задать перменную SUB_UPDATE_INTERVAL
в файле .env
:
Пример:
subscription-userinfo
Информация о трафике и истечении срока действия
Значения генерируются автоматическии
Пример:
Sing-Box
При запросе к ссылке через клиент на базе Sing-box, или с испольованием ключа /sing-box
, пользователь получит валидный json, построенный на шаблоне
Для применения собственного шаблона, Вам необходимо использовать 2 перменные в файле .env
:
CUSTOM_TEMPLATES_DIRECTORY
SINGBOX_SUBSCRIPTION_TEMPLATE