Перейти к основному содержимому

Правила маршрутизации

Правила маршрутизации (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подписка в нужном формате
BROWSERHTML-страница для браузера
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 заблокирует всех, кто дошёл до него. Ставьте правила по убыванию точности и проверяйте подписку после каждой правки.

Что дальше​