Правила маршрутизации
Правила маршрутизации (Response Rules, SRR) — упорядоченный набор правил, по которым панель решает, что вернуть на запрос подписки. Решение принимается по HTTP-заголовкам запроса: клиенту можно отдать другой формат, другой шаблон или другие заголовки, а можно и вовсе отказать.
Правила работают на стороне панели и на ноды не попадают. Маршрутизация самого
Xray (routing.rules) задаётся в профиле конфигурации и применяется к нодам —
см. Профили конфигурации.
Где настраиваются
Правила хранятся в настройках подписки как объект responseRules и
редактируются в разделе управления правилами:
{
"version": "1",
"settings": { "disableSubscriptionAccessByPath": false },
"rules": []
}
disableSubscriptionAccessByPath: true закрывает доступ к подписке по
дополнительным путям (/json, /mihomo, /stash).
Порядок применения
Правила проверяются сверху вниз. Срабатывает первое подходящее правило, на
нём проверка останавливается. Правила с enabled: false пропускаются. Если не
подошло ни одно правило, запрос блокируется — поэтому последним часто ставят
правило без условий, которое отдаёт обычную подписку.
Операторы и условия
operator правила задаёт, как объединяются условия:
| Оператор | Когда правило подходит |
|---|---|
AND | подходят все условия |
OR | подходит хотя бы одно условие |
Пустой массив conditions подходит всегда — это «правило по умолчанию».
Каждое условие проверяет один заголовок:
{
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ",
"caseSensitive": false
}
| Оператор условия | Проверка |
|---|---|
EQUALS, NOT_EQUALS | точное совпадение |
CONTAINS, NOT_CONTAINS | вхождение подстроки |
STARTS_WITH, NOT_STARTS_WITH | начало строки |
ENDS_WITH, NOT_ENDS_WITH | конец строки |
REGEX, NOT_REGEX | регулярное выражение |
Имена заголовков нечувствительны к регистру, несколько значений одного заголовка склеиваются через запятую, а отсутствующий заголовок означает, что условие не выполнено.
Типы ответа
responseType определяет, что получит клиент при совпадении:
| Тип | Ответ |
|---|---|
XRAY_JSON, XRAY_BASE64, MIHOMO, CLASH, STASH, SINGBOX | подписка в нужном формате |
BROWSER | HTML-страница для браузера |
BLOCK | отказ, HTTP 403 |
STATUS_CODE_404, STATUS_CODE_451 | отказ с кодом 404 или 451 |
SOCKET_DROP | разрыв соединения |
Модификации ответа
Блок responseModifications уточняет ответ:
subscriptionTemplate— имя шаблона; приоритет выше настроек внешнего сквада;headersиapplyHeadersToEnd— добавить заголовки, при необходимости в самом конце, поверх остальных;ignoreHostXrayJsonTemplate— не использовать Xray JSON шаблон хоста;ignoreServeJsonAtBaseSubscription— отдать base64 даже тем клиентам, которым обычно отдаётся JSON;disableHwidCheck— не проверять HWID для этого правила;additionalExtendedClientsRegex— расширить список «расширенных» клиентов;excludeHostsByTags— убрать из выдачи хосты с указанными метками;respondWithRemarks— заменить тело ответа текстом.
Типовой сценарий: отдавать клиенту на Android отдельный JSON-шаблон, а
устаревшим приложениям — BLOCK. Пример такого правила панель показывает при
редактировании.
Правило без условий и с responseType: BLOCK заблокирует всех, кто дошёл до
него. Ставьте правила по убыванию точности и проверяйте подписку после каждой
правки.
Что дальше
- Шаблоны — что подставляется в ответ.
- Сквады — приоритет правил над внешними сквадами.
- Хосты — метки хостов для
excludeHostsByTags. - Профили конфигурации — маршрутизация Xray на нодах.