响应规则
注意
如果您不确定所做的更改,请谨慎操作。错误的修改可能会中断系统。
响应规则(SRR)是一组有序的(从上到下;如果规则适用,则停止评估)JSON 规则,后端会对传入的订阅请求进行评估。
提示
响应规则将覆盖外部小队配置。
创建自定义响应规则
让我们创建一个自定义响应规则,为使用 Happ 客户端应用的 Android 用户提供自定义模板和自定义标头。
其工作方式如下:
- 用户请求订阅
- Remnawave 识别出他正在 Android 上使用 Happ。
- Remnawave 用自定义
Happ Android模板响应,并添加自定义标头HappTheBestAppOnTheWorld。
规则可能如下所示:
{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND", // Both "user-agent" and "x-device-os" must be matched
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "EQUALS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android", // Serve the custom Template
"headers": [ // Serve the custom headers
{
"key": "x-provider-id",
"value": "HappTheBestAppOnTheWorld"
}
]
}
}
rules
每条规则是一个包含以下字段的对象:
-
name(string) — 必填;1..50 个字符"name": "Block Legacy Clients" -
description(string) — 可选;最多 250 个字符"description": "Blocks requests from legacy clients" -
enabled(boolean) — 必填
控制规则是否激活。当为false时,规则在评估期间被跳过。"enabled": true -
operator(enum) — 必填;AND或OR"operator": "AND" // Rule matches only if ALL conditions match
"operator": "OR" // Rule matches if ANY condition matches -
conditions(array)
要评估的条件列表。"conditions": [] // Empty = match everything (use for fallback rules) -
responseType(enum) — 必填
确定规则匹配时发送何种响应:类型 描述 MIHOMOMihomo YAML 配置 CLASHClash YAML 配置 STASHStash YAML 配置 SINGBOXSing-box JSON 配置 XRAY_JSONXray JSON 配置 XRAY_BASE64Base64 编码的 Xray 配置 BROWSER浏览器 HTML 页面 BLOCKHTTP 403 Forbidden STATUS_CODE_404HTTP 404 Not Found STATUS_CODE_451HTTP 451 Unavailable For Legal Reasons SOCKET_DROP断开 socket 连接 -
responseModifications(array) - 可选
应用于响应的额外修改。可用于提供自定义模板或标头。subscriptionTemplate(string) - 可选
定义规则匹配时要提供的特定模板。headers(array) - 可选
使用自定义标头响应。key(string) - 可选
标头名称。value(string) - 可选
标头值。
applyHeadersToEnd(boolean) - 可选
默认情况下,标头在形成响应时被添加。在某些情况下,SRR 中设置的标头可能被系统其他部分(如外部小队)的标头覆盖。如果将此标志设置为true,SRR 的标头将在响应发送前的最后阶段添加。在这种情况下,SRR 标头可能会覆盖其他部分的标头。ignoreHostXrayJsonTemplate(boolean) - 可选
每个主机可以有自己的 Xray Json 模板。如果将此标志设置为true,将使用 SRR 定义的 Xray Json 模板。主机的 Xray Json 模板将被忽略。ignoreServeJsonAtBaseSubscription(boolean) - 可选
在某些场景下,当启用Serve JSON at Base Subscription时,您可能希望向面板识别为能够接受XRAY_JSON的客户端应用程序提供XRAY_BASE64。
如果将此标志设置为true,Serve JSON at Base Subscription设置将被忽略(设置为false)。disableHwidCheck(boolean) - 可选
某些情况下,客户端应用程序可能需要忽略 HWID 检查。如果将此标志设置为true,将忽略 HWID 支持检查。
"responseType": "SINGBOX",
"responseModifications": {
"applyHeadersToEnd": true,
"headers": [
{
"key": "X-Custom-Header",
"value": "CustomValue"
}
],
"ignoreHostXrayJsonTemplate": true,
"ignoreServeJsonAtBaseSubscription": true,
"subscriptionTemplate": "Singbox Legacy"
}
rules.conditions
-
headerName(string) — 必填
要检查的 HTTP 标头。必须符合 RFC 7230。"headerName": "user-agent" // Client app user-agent -
operator(enum) — 必填
要执行的比较操作:运算符 描述 EQUALS精确匹配 NOT_EQUALS反向精确匹配 CONTAINS子字符串存在 NOT_CONTAINS子字符串不存在 STARTS_WITH前缀匹配 NOT_STARTS_WITH前缀不存在 ENDS_WITH后缀匹配 NOT_ENDS_WITH后缀不存在 REGEX正则表达式 NOT_REGEX反向正则表达式 -
value(string) — 必填;1..255 个字符
与标头值进行比较的值。"value": "^sfa|sfi|sfm|sft|karing|singbox|rabbithole" -
caseSensitive(boolean) — 必填"caseSensitive": true // The value is compared as is
"caseSensitive": false // The value is lowercased before comparison
提供特定操作系统的模板
您可以轻松地为不同操作系统响应不同的模板。
在下面的示例中,iOS 用户将获得 Happ iOS JSON,Android 用户将获得 Happ Android JSON。
{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android"
}
},
{
"name": "Happ iOS",
"description": "Serve custom JSON for iOS",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "ios"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ iOS"
}
}
标头解析规则
- 标头名称不区分大小写
"user-agent" === "User-Agent" === "USER-AGENT" - 如果标头有多个值,它们将连接成一个字符串,以逗号分隔。
- 标头值缺失会导致规则被跳过。