Subscription Aggregator for 3x-ui Proxy Servers
Subscription Aggregator for 3x-ui Proxy Servers — это обратный прокси, который объединяет подписки с нескольких прокси-серверов, работающих на платформе 3x-ui, в одну ссылку. Проект расширяет стандартные возможности подписок 3x-ui и делает их использование более удобным.
Для чего
Платформа 3x-ui не позволяет объединить несколько серверов, как, например, Marzban. Это приложение частично решает проблему, предоставляя единую ссылку для доступа к подпискам с нескольких прокси-серверов, облегчая подключение для пользователей.
Как работает
Приложение получает запрос с subscription_id и дублирует его на сервера 3x-ui. Каждый сервер возвращает конфигурацию в виде base64 строки. Приложение декодирует полученные данные, объединяет их и снова кодирует в base64. Пользователю нужно вставить лишь один URL, ссылающийся на Nginx сервер, чтобы получить доступ ко всем конфигурациям.
Так, если отправить запрос на https://example.com/sub/test
, приложение отправит соответствующие запросы на получение подписок, к примеру на https://3x-ui_server/subscription/test
и https://another_server/podpiska/test
. Если подписки найдены, приложение получает ответы и объединяет их, возвращая пользователю base64 строку.
Стек технологий
🐍🚀 Backend: Python + FastAPI + httpx
🌐🔒 Сервер: Nginx
🐳🛠️ Инфраструктура: Docker
Основные фичи
✅ Объединение подписок — Автоматическое извлечение данных с нескольких прокси-серверов и их объединение в одну ссылку
✅ Асинхронная работа — Использование асинхронного Python (FastAPI), а также Nginx
✅ Безопасность — Обязательное использование HTTPS и редирект с HTTP
✅ Простота развёртывания — Благодаря Docker
Исходный код
Все исходники доступны на GitHub. Далее разберём логику проекта, а именно main.py
файл.
Импорт библиотек
os
для работы с переменными окружения;httpx
для асинхронных HTTP-запросов;base64
для кодирования и декодирования данных соответствующего формата;logging
для логирования ошибок;asyncio.gather
для параллельного выполнения асинхронных задач;typing.Optional
для аннотации, поскольку в качестве Docker-образа используется старая легковесная версия Python, в которой ещё не поддерживаются последнии фичи аннотации;dotenv.load_dotenv
для загрузки переменных окружения;fastapi
для создания веб-приложения и обработки запросов.
|
|
Настройка логера
Здесь настраивается система логирования. В файл script_log.log записываются предупреждения и ошибки в формате {дата_и_время уровень_логирования сообщение}
|
|
Инициализация FastAPI
Первая строка создаёт экземпляр веб-приложения, а вторая загружает переменные окружения из файла .env
.
|
|
Функция fetch_subscription
Отправляет асинхронный GET-запрос к sub_url/sub_id. В случае успешного ответа декодирует base64 в бинарный формат, иначе — возвращает None
и записывает ошибку в логи.
|
|
Функция merge_subscriptions
- Получает список URL из переменной окружения;
- Проверяет наличие хотя бы одного сервера;
- Создаёт асинхронный клиент;
- Параллельно запрашивает подписки со всех серверов;
- Фильтрует результаты, чтобы убрать неудачные запросы;
- Объединяет и кодирует данные;
- Возвращает ответ в виде голого текста.
|
|
Установка
Процесс установки подробно описан в README.md проекта.
Ссылки
GitHub-репозиторий проекта: https://github.com/NoisyCake/3x-ui_subscriptions_aggregator#
Автор: https://t.me/noisycake
ТКГ: https://t.me/hfk_blog
Teletype: https://teletype.in/@noisycake
Лицензия
Проект распространяется под лицензией MIT. Подробности в файле LICENSE.
