Формат подписки
Xray Checker поддерживает пять различных форматов для конфигурации прокси. Для настройки используйте переменную окружения SUBSCRIPTION_URL.
Подробнее о методах проверки прокси читайте в разделе методы проверки.
1. URL подписки (По умолчанию)
Стандартный URL подписки, возвращающий Base64-кодированный список прокси-ссылок.
Пример:
SUBSCRIPTION_URL=https://example.com/subscriptionТребования:
- HTTPS URL
- Возвращает Base64-кодированное содержимое
- Содержимое - это прокси-URL, разделенные переносом строки
- Поддерживает стандартные заголовки User-Agent
Отправляемые заголовки:
Accept: */*User-Agent: Xray-Checker2. Строка Base64
Прямая Base64-кодированная строка, содержащая ссылки конфигурации прокси.
Пример:
SUBSCRIPTION_URL=dmxlc3M6Ly91dWlkQGV4YW1wbGUuY29tOjQ0MyVlbmNyeXB0aW9uPW5vbmUmc2VjdXJpdHk9dGxzI3Byb3h5MQ==Формат содержимого (до кодирования):
vless://[email protected]:443?encryption=none&security=tls#proxy1trojan://[email protected]:443?security=tls#proxy2vmess://base64encodedconfigss://base64encodedconfighysteria2://[email protected]:443?sni=example.com#proxy53. JSON-файл V2Ray
Один JSON-файл конфигурации в формате V2Ray/Xray.
Пример:
SUBSCRIPTION_URL=file:///path/to/config.jsonФормат файла:
{ "outbounds": [ { "protocol": "vless", "settings": { "vnext": [ { "address": "example.com", "port": 443, "users": [ { "id": "uuid", "encryption": "none" } ] } ] }, "streamSettings": { "network": "tcp", "security": "tls" } } ]}4. Xray JSON-массив (Мульти-конфиг)
JSON-массив, содержащий несколько конфигураций Xray с именами. Этот формат удобен при экспорте конфигураций из GUI-клиентов или управлении несколькими именованными конфигурациями в одном файле.
Пример:
SUBSCRIPTION_URL=file:///path/to/configs.jsonФормат файла:
[ { "remarks": "US Server 1", "outbounds": [ { "protocol": "vless", "settings": { "vnext": [ { "address": "us1.example.com", "port": 443, "users": [{ "id": "uuid-1", "encryption": "none" }] } ] }, "streamSettings": { "network": "tcp", "security": "tls" } } ] }, { "remarks": "EU Server 1", "outbounds": [ { "protocol": "trojan", "settings": { "servers": [ { "address": "eu1.example.com", "port": 443, "password": "password123" } ] }, "streamSettings": { "network": "tcp", "security": "tls" } } ] }]Поле remarks из каждой конфигурации будет использоваться как имя прокси в панели управления.
5. Папка с конфигурациями
Директория, содержащая несколько JSON-файлов конфигурации V2Ray/Xray.
Пример:
SUBSCRIPTION_URL=folder:///path/to/configsТребования:
- Директория должна содержать .json файлы
- Каждый файл следует формату JSON V2Ray
- Файлы обрабатываются в алфавитном порядке
- Некорректные файлы пропускаются с предупреждением
6. JSON-подписка (балансировщики)
Некоторые панели (например, Remnawave) отдают полный JSON-конфиг Xray вместо Base64-списка ссылок и объединяют несколько серверов в один балансировщик (balancer / leastPing). При стандартном формате Base64 такая группа сворачивается в одну запись, поэтому невозможно понять, какой именно узел недоступен.
Включите SUBSCRIPTION_JSON_FORMAT, чтобы запросить JSON-форму и развернуть каждый outbound внутри балансировщика в отдельно проверяемый прокси:
SUBSCRIPTION_URL=https://panel.example.com/subSUBSCRIPTION_JSON_FORMAT=trueУзлы внутри группы именуются как <group> | <node> и имеют общий group_name (используется сгруппированным дашбордом и меткой метрики group_name). При включённом формате JSON запрос отправляется с похожим на приложение User-Agent; переопределите его через SUBSCRIPTION_USER_AGENT, если ваша панель ожидает определённый клиент.
7. SOCKS, HTTP и HTTPS прокси
Помимо протоколов Xray, можно проверять работоспособность обычных форвард-прокси. Добавляйте их как строки подписки (из любого источника — URL, base64://, file:// или inline):
socks://base64(user:pass)@host:port#namesocks5://user:pass@host:port#namehttp://user:pass@host:port#namehttps://user:pass@host:port#namesocks://,socks5://иsocks5h://соответствуют SOCKS outbound. Учётные данные могут быть как обычнымиuser:pass, так и (дляsocks://) стандартным Base64-кодированным токеномuser:pass.http://— обычный HTTP CONNECT прокси.https://— HTTP-прокси, доступный через TLS.- Фрагмент
#nameзадаёт отображаемое имя (по умолчаниюhost:port).
Для https:// прокси с самоподписанным или приватным сертификатом закрепите его вместо отключения проверки (xray-core больше не поддерживает allowInsecure):
https://user:pass@host:port?pinnedPeerCertSha256=<sha256-hex>#namehttps://user:pass@host:port?sni=real.example.com&verifyPeerCertByName=real.example.com#name| Параметр запроса | Псевдоним | Описание |
|---|---|---|
pinnedPeerCertSha256 | pcs | Принять сертификат пира, чей SHA-256 (hex, двоеточия допускаются) совпадает — для самоподписанных/внутренних сертификатов |
verifyPeerCertByName | vcn | Проверять сертификат по этому имени вместо хоста |
sni | — | TLS Server Name (по умолчанию совпадает с хостом) |
8. WireGuard
Серверы WireGuard также можно проверять на работоспособность. Добавляйте их как строки подписки (из любого источника — URL, base64://, file:// или inline) по схеме wg://, где полезная нагрузка — это Base64 стандартного .conf-файла WireGuard:
wg://<base64 of the .conf>#nameДекодированный .conf — это обычный конфиг WireGuard, который выдаёт ваш провайдер:
[Interface]PrivateKey = <client private key>Address = 10.9.0.2/32DNS = 1.1.1.1 # optional, ignored by the checkerMTU = 1420 # optional (default 1420)
[Peer]PublicKey = <server public key>PresharedKey = <psk> # optionalEndpoint = wg.example.com:51820AllowedIPs = 0.0.0.0/0, ::/0PersistentKeepalive = 25 # optional- Проверяется
Endpointпира (host:port). Используется первый[Peer]. - Фрагмент
#nameзадаёт отображаемое имя (по умолчаниюwireguard-<host>). - Только стандартный, необфусцированный WireGuard. (AmneziaWG /
awg://не поддерживается.)
WireGuard также работает внутри JSON-подписки — outbound wireguard в JSON-конфиге Xray разбирается автоматически:
{ "protocol": "wireguard", "settings": { "secretKey": "<client private key>", "address": ["10.9.0.2/32"], "mtu": 1420, "peers": [ { "publicKey": "<server public key>", "endpoint": "wg.example.com:51820", "allowedIPs": ["0.0.0.0/0", "::/0"], "keepAlive": 25 } ] }}9. Кастомные лейблы метрик
Любой outbound в JSON-подписке (разделы 3, 4 и 6) может содержать объект metricsLabels со статическими лейблами, заданными оператором. Каждая запись становится дополнительным лейблом на метриках xray_proxy_status и xray_proxy_latency_ms этого прокси и возвращается в API в поле metricsLabels. Это позволяет фильтровать и агрегировать по таким атрибутам, как локация или хостер, прямо в PromQL и Grafana.
{ "protocol": "trojan", "tag": "proxy", "settings": { "servers": [{ "address": "1.1.1.1", "port": 443, "password": "..." }] }, "metricsLabels": { "location": "Netherlands, Amsterdam", "hoster": "FreeVDS" }}Лейблы добавляются к метрике:
xray_proxy_status{protocol="trojan",address="1.1.1.1:443",name="proxy",...,location="Netherlands, Amsterdam",hoster="FreeVDS"} 1Примечания:
- Ключи приводятся к корректным именам лейблов Prometheus (например,
data center→data_center); ключи, совпадающие со встроенными лейблами (protocol,address,name,sub_name,stable_id,group_name,instance), игнорируются. - Лейблы доступны только в JSON-подписках — в share-ссылках (
vless://, …) их негде передать. - Изменение лейбла и обновление подписки применяются при следующем обновлении без сброса серий других прокси в 0. См.
metricsLabelsна метриках.
Кастомные заголовки запросов
Панели, закрывающие подписку токеном или ожидающие определённого клиента, можно удовлетворить с помощью кастомного User-Agent и произвольных заголовков:
SUBSCRIPTION_USER_AGENT="Happ/1.0"SUBSCRIPTION_HEADERS="X-Token: abc, X-Region: eu"