Skip to content

Подписки и страница подписки ​

У каждого пользователя есть один адрес подписки. Приложение запрашивает его и получает все способы подключиться к вашим узлам в том формате, который оно понимает. Открытый в браузере, тот же адрес показывает страницу подписки. Здесь описаны настройки, которые определяют и то, и другое. Как собираются записи, рассказано в От шаблона до ссылки.

Страница настроек подписок: карточки определения клиента, страницы подписки и её темы, имён ссылок с предпросмотром и базовой конфигурации для каждого форматаСтраница настроек подписок: карточки определения клиента, страницы подписки и её темы, имён ссылок с предпросмотром и базовой конфигурации для каждого формата

Настройки разделены между двумя страницами: куда ведут ссылки — в Настройки → Общие, всё остальное — в Настройки → Подписки. Изменения применяются при следующем запросе подписки пользователем; на узлы ничего не отправляется.

Куда ведут ссылки ​

Настройки → Общие → Подписки и интеграции.

Домены подписок ​

Домены подписок (необязательно) — список имён хостов, на которых строятся ссылки пользователей, например sub.example.com. Не больше восьми.

  • Новые ссылки используют первый домен. Каждый домен из списка продолжает обслуживать уже выданные ссылки.
  • Чтобы заменить переставший работать домен, добавьте новый, переместите его наверх и держите старый в списке, пока приложения пользователей не обновятся на новые ссылки. Ссылки домена отключаются именно удалением его из списка.
  • Пишите каждый домен как одно имя хоста, без порта и пути. Ссылки используют порт панели или не содержат порта вовсе, если задан Публичный адрес.
  • Каждому домену нужна DNS-запись, указывающая на панель, и место в сертификате панели. При сохранении списка собственный сертификат панели перевыпускается так, чтобы покрыть все домены. В сертификат, которым вы управляете сами, их нужно добавить вручную.

На домене подписки панель отвечает на запросы подписок, а сама панель доступна только по своему базовому пути. Если базовый путь не задан, эти имена обслуживают только подписки.

DANGER

Если у панели нет ни базового пути, ни домена, то добавление в домены подписок того адреса, с которого вы управляете панелью, закрывает вам доступ к ней. Сначала задайте базовый путь. Чтобы восстановить доступ, очистите список из командной строки сервера; см. Командная строка.

Отдельное имя хоста для каждого подписчика ​

Запишите домен с подстановочным знаком, *.sub.example.com, и каждый подписчик получит собственное имя хоста под ним, например k4m2xr8qvp.sub.example.com. Если одно имя перестанет работать, это коснётся одного клиента, а не всей вашей базы.

  • Имя вычисляется из аккаунта пользователя, поэтому при каждом обновлении оно одно и то же. По нему нельзя восстановить подписку, а под каждым wildcard-доменом один и тот же пользователь получает несвязанное имя.
  • Нужна wildcard-запись DNS, *.sub.example.com, указывающая на панель. Без неё эти имена ни у кого не разрешаются.
  • Собственный сертификат панели покрывает wildcard автоматически.
  • Обслуживается ровно один уровень: abc.sub.example.com, но не a.b.sub.example.com.

Главный администратор может также выделить каждому реселлеру свой домен подписок из списка, чтобы ссылки его клиентов использовали этот домен. См. Реселлеры.

Базовый путь и публичный адрес ​

  • Базовый путь подписок (необязательно): путь, под которым строятся ссылки подписок. Он должен отличаться от базового пути панели.
  • Публичный адрес: публичный адрес панели, например https://vpn.example.com. Если домена подписок нет, ссылки строятся на нём, а не на том адресе, по которому пришёл запрос. Задайте его, когда дополнения или скрипты обращаются к панели по внутреннему имени, чтобы выдаваемые ими ссылки работали у пользователей. Домен подписок всё равно имеет приоритет.

Форматы для каждого приложения ​

Панель отвечает каждому приложению в формате, который оно понимает, и сама распознаёт большинство приложений:

ФорматПриложения
Ссылки, base64 (v2ray)Happ, v2RayTun, INCY, Streisand, v2rayN, v2rayNG, Shadowrocket, NekoBox, V2Box
Clash (clash)Приложения на основе Clash Meta, mihomo и Stash
Профиль sing-box (singbox)Приложения sing-box (SFA, SFI), Hiddify, Karing
Профиль Xray JSON (xray)Приложения на основе Xray, которые импортируют полный JSON-профиль
Простые ссылки (plain)Всё, что принимает ссылки по одной на строку

Приложение, которое панель не распознала, получает Формат подписки по умолчанию из карточки Определение клиента. Ссылка может и сама указать формат: адрес, за которым следует /clash, /singbox, /xray или /plain.

Не каждое приложение может использовать каждый инбаунд. Инбаунд, который формат приложения не может выразить, не попадает в файл этого приложения, а не включается в полурабочем виде; на страницах протоколов сказано, где это так.

Шаблоны подписок содержат базовую конфигурацию, из которой строятся форматы Clash, sing-box и Xray, по вкладке на каждый. Сгенерированные записи вливаются в неё. Оставьте вкладку пустой, чтобы использовать встроенную основу.

Имена записей ​

Имена ссылок задают, как называется каждая запись в подписке. Пустое значение, по умолчанию, оставляет имена, которые панель создавала всегда. Приложения запоминают выбранный пользователем сервер по имени, поэтому смена имён на работающем сервисе сбивает выбор у всех.

Шаблон имени — это текст с переменными:

{USER} · {ROUTE} · {REMAINING}        →   ali · CDN · 42.1 GB
{INBOUND}-{NODE}                      →   vless-ws-de-1
Переменная
{USER}, {USER_REMARK}Имя аккаунта и примечание
{INBOUND}, {PROTOCOL}, {NETWORK}Тег, протокол и транспорт инбаунда
{NODE}, {NODE_REMARK}Узел; пусто у записи фронта
{ROUTE}Метка адреса узла или фронта, который использует запись
{SERVER}, {PORT}Куда подключается запись
{USED}, {REMAINING}, {TOTAL}Трафик; ∞, если лимита нет
{DAYS_LEFT}, {EXPIRE}Сколько дней осталось и дата окончания; ∞, если срока нет
{EXPIRE_JALALI}Дата окончания по солнечному календарю хиджры
  • Всё, чего нет в списке, остаётся как написано, поэтому переменная с опечаткой видна, а не пропадает. Шаблон без единой известной переменной отклоняется.
  • Пустая переменная забирает с собой свой разделитель: {USER}-{NODE}-{INBOUND} у записи фронта даёт ali-vless-ws.
  • Даты и объёмы совпадают со страницей подписки и показываются в часовом поясе панели.
  • Предпросмотр показывает результат на примере аккаунта; его отрисовывает сама панель.

Файлы конфигурации приложений (.conf, .ovpn) сохраняют свои имена.

Что сообщается приложениям ​

Ответ подписки несёт также заголовки, которые многие приложения показывают без каких-либо действий пользователя:

ПараметрПередаётся какПоказывает
Заголовок профиля (или примечание пользователя)Profile-TitleHapp, v2RayTun
Квота, расход и срок пользователяSubscription-UserinfoHapp, v2RayTun, Clash Meta
Интервал обновления у клиентаProfile-Update-IntervalHapp, v2RayTun
ОбъявлениеAnnounceHapp, v2RayTun
Ссылка на поддержкуSupport-UrlHapp
Предлагать ссылку на страницу подпискиProfile-Web-Page-UrlHapp
  • Интервал обновления у клиента задаётся в часах; пустое поле означает 12. 0 не отправляет заголовок, и каждое приложение использует своё значение по умолчанию.
  • Если выключить Предлагать ссылку на страницу подписки, заголовок не отправляется вовсе, а не отправляется пустым.
  • Текст на персидском, русском или китайском передаётся в закодированном виде, чтобы приложения показывали его правильно. Объявление — одна строка: переносы строк становятся пробелами.
  • Happ показывает около 25 символов заголовка и около 200 символов объявления.

Страница подписки ​

Открытый в браузере, адрес подписки показывает страницу с расходом пользователя, сроком действия, историей трафика и каждым способом подключения с QR-кодом, кнопкой копирования и кнопками импорта подписки в популярные приложения. Пользователи WireGuard, OpenVPN и OpenConnect получают там же файлы конфигурации для своих приложений. Страница следует языку браузера пользователя.

Настройки → Подписки → Страница подписки:

Параметр
ТемаВстроенная страница · фиолетовая (по умолчанию), Встроенная страница · янтарная или одна из ваших тем
Каталог темОткуда читаются ваши темы. Только для главного администратора
Заголовок профиля, Ссылка на поддержку, ОбъявлениеПоказываются на странице и также передаются приложениям в заголовках
Отдавать браузеру сырую конфигурациюВыключает страницу: браузер получает тот же ответ, что и приложение

Своя тема ​

Тема — это каталог в каталоге тем, где лежит index.html (или sub.html) и все файлы, которые он использует. По умолчанию это /var/opt/nexora/sub-themes/ при стандартной установке и ./sub-themes рядом с compose-файлом в Docker. Положите туда каталог, нажмите Пересканировать каталог тем и выберите тему в поле Тема. Перезапуск не нужен.

  • В именах каталогов допустимы буквы, цифры, ., _ и -.
  • Правки появляются через несколько секунд.
  • Тема, которая не загрузилась или не отрисовалась, заменяется фиолетовой страницей, поэтому неудачная правка никогда не лишает пользователя подписки. Причина записывается в журнал панели.
  • Две встроенные страницы — хорошая отправная точка: каждая из них — один самодостаточный index.html.

Чтобы посмотреть тему, откройте адрес подписки пользователя, добавив /page.

Для авторов тем. Страница — это HTML-шаблон, который заполняет панель. Он получает пользователя (.User: имя, примечание, статус, онлайн), его трафик (.Usage, числами и форматированным текстом), .Expire и .Reset, историю трафика в виде SVG-столбцов (.Chart), каждый способ подключения (.Links, .Configs), файлы WireGuard, OpenVPN и OpenConnect (.Apps), адрес подписки в каждом формате с готовыми ссылками импорта для приложений (.Sub), ваш заголовок, ссылку на поддержку и объявление (.Panel), а также язык посетителя с переведёнными фразами встроенной страницы (.Lang, .Dir, .T). Вспомогательные функции форматируют байты и даты и рисуют QR-коды. Файлы рядом с index.html отдаются по адресу из .AssetBase. Если добавить /info к адресу подписки, вернутся те же данные в JSON, без ссылок, — для страницы, которая обновляет себя сама. Тема может только оформлять то, что ей передано: к базе данных, диску и сети у неё доступа нет.

INCY и V2RayTun умеют импортировать подписку по зашифрованной ссылке, в которой не виден адрес подписки. На вкладках INCY и V2RayTun в Шаблоны подписок кнопки Получить ключ от INCY и Получить ключ от V2RayTun сохраняют ключ каждого приложения, и кнопки импорта на странице для этого приложения переходят на зашифрованную форму. Удалите ключ, чтобы вернуться к обычным ссылкам.

Лимит устройств, строгий режим ​

Лимит устройств пользователя считает устройства, которые представляются при запросе подписки. Большинство приложений и все браузеры идентификатор устройства не отправляют.

Лимит устройств отклоняет клиентов без идентификатора решает, что с ними делать:

  • Выкл (по умолчанию): приложения без идентификатора устройства обслуживаются, а лимит действует только на те, что представляются.
  • Вкл: пользователь с лимитом устройств получает подписку только на устройствах, которые сообщают, кто они.

Включайте это, только если все ваши пользователи работают в приложениях, отправляющих идентификатор устройства. См. Пользователи.

Попросите пользователей выключить Mux ​

В приложениях на основе Xray (v2rayNG, v2rayN, Streisand) есть переключатель Mux. Ваши узлы не поддерживают протокол мультиплексирования, который он включает, поэтому с включённым Mux подключение просто не работает, и пользователь не видит понятного сообщения. Панель не может выключить его со своей стороны.

Страница подписки предупреждает об этом пользователей на их языке в разделе Дополнительно. Повторите это в своих инструкциях по настройке. Настройки мультиплексирования в приложениях sing-box и Clash — другая функция, с ними всё в порядке.

И ещё о v2rayNG: Update subscription обновляет только группу, открытую на экране. Пользователь, который импортировал вашу ссылку и обновляет подписку, пока открыта другая группа, видит пустой список без ошибки. Попросите его сначала открыть вкладку новой группы.

Текст и изображения — CC BY 4.0.