Брендинг страницы подписки под свой сервис
Страница подписки — первое, что видит клиент. Кривая дефолтная страница режет доверие и конверсию. Ниже — как поднять свой домен подписки, забрендировать её и включить флаги, которые не дают растащить твой ключ. Свои данные впиши в конструктор сверху.
Что это и зачем возиться
Страница подписки — лицо сервиса для клиента. Он открывает ссылку и либо видит аккуратную страницу с кнопками «добавить в приложение» и QR, либо его приложение молча тянет оттуда конфиг. Один и тот же URL умеет оба ответа — панель определяет по запросу.
По умолчанию страница обезличенная. Забрендировать её стоит не ради красоты: своя страница с логотипом и контактами поддержки повышает доверие и конверсию, а пара приватных флагов не дают клиенту вытащить и перепродать твой ключ. Разберём по порядку.
Свой домен и путь подписки
Подписку выносим на отдельный сабдомен. Задаётся в .env панели, без схемы (без https://):
SUB_PUBLIC_DOMAIN=sub.your-domain.com
SHORT_UUID_LENGTH=48Две вещи здесь работают на безопасность:
SHORT_UUID_LENGTH(16–64) — длина короткого идентификатора подписки. Длиннее = труднее перебрать чужую ссылку. Ставь ближе к верхней границе.- Нестандартный путь — меняй дефолтный префикс на произвольный (например
/s/или/go/), чтобы ссылки не угадывались сканерами.
После правки .env нужен полный пересоздать, обычный restart не перечитывает переменные:
cd /opt/remnawave
docker compose down && docker compose up -dПо умолчанию подписку отдаёт сам backend. Отдельный контейнер страницы подписки нужен, только если хочешь свою кастомную/ребренд-страницу — тогда reverse-proxy ведёт на неё. Caddy для сабдомена подписки, если ставишь отдельный контейнер:
sub.your-domain.com {
reverse_proxy * http://remnawave-subscription-page:3010
}Брендинг: логотип, цвета, тексты
В редакторе страницы подписки (Subpage Editor) задаётся название сервиса, логотип, цвета, тексты и ссылки на поддержку и канал. Логотип и фон — свои файлы, контакты — твой бот и канал. Ключевые поля брендинга:
{
"brandingSettings": {
"title": "BRANDNAME",
"logoUrl": "https://your-domain.com/logo.svg",
"supportUrl": "https://t.me/your_support_bot"
},
"metaTitle": "BRANDNAME"
}Заполняешь своими данными — страница становится «твоей». Клиент видит не голый Remnawave, а сервис с именем и лицом.
Приватные флаги: не дай растащить ключ
Главное, ради чего стоит лезть в app-config страницы. Два флага, которые закрывают самую частую утечку:
{
"showConnectionKeys": false,
"hideGetLinkButton": true
}showConnectionKeys: false— клиент не видит сырой конфиг хоста (VLESS/Reality-ключи, SNI, адрес, порт, shortId). Только кнопки «добавить в приложение» и QR. Зачем: клиент не вытащит и не перепродаст твой ключ как отдельный конфиг, и не светятся внутренности хоста (донор, порт, транспорт) — меньше поверхности, чтобы скопировать твою схему.hideGetLinkButton: true— парный флаг, убирает кнопку «получить ссылку», чтобы саму подписку тоже не растаскивали.
Оба флага — прямая защита выручки. Без них технически подкованный клиент выдёргивает конфиг и раздаёт друзьям бесплатно.
Кнопки приложений и QR
Страница умеет отдавать deep-links на популярные клиенты (Happ, Hiddify, v2rayTun и другие) — клиент жмёт «Добавить в Happ» и подписка импортируется в один тап. Плюс QR-код для телефона. Это резко снижает вал тикетов «как подключить».
В app-config прописываются клиенты по платформам с авто-импортом и пошаговыми инструкциями. Плейсхолдеры вроде {{SUBSCRIPTION_LINK}} не трогай — их панель подставляет под каждого пользователя сама. Не собирай app-config руками с нуля: возьми готовый шаблон и поменяй только брендинг.
Применяем
Порядок такой: Subscription-page → Subpage Editor → импорт app-config → вставляешь JSON → вписываешь свой brandingSettings и metaTitle. После правок в клиенте (например, в Happ) подписку лучше удалить и добавить заново, чтобы сбросить кэш и подтянуть новый вид.
Гигиена
- Длинный
SHORT_UUID_LENGTH+ нестандартный путь — против перебора чужих подписок. - Подписка — единственное, что светится публично. По её адресу панель и ноды не угадываются: отдавай только адреса хостов, никогда не свети адрес панели.
- Флаги приватности всегда включены на проде — это не опция, а защита от бесплатной раздачи.
Страница забрендирована и защищена. Дальше по разделу — тонкая настройка хостов (как панель собирает саму ссылку клиенту) и защита панели. А форматы подписки под разные приложения — отдельная тема Response Rules, которую стоит разобрать, когда пойдут клиенты на разных клиентах.
Следующий гайд Hosts и inbounds: как панель собирает ссылку клиенту → ↗ Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →