跳到主要内容

响应规则

注意

如果您不确定所做的更改,请谨慎操作。错误的修改可能会中断系统。

响应规则(SRR)是一组有序的(从上到下;如果规则适用,则停止评估)JSON 规则,后端会对传入的订阅请求进行评估。

Templates menu
提示

响应规则将覆盖外部小队配置。

创建自定义响应规则

让我们创建一个自定义响应规则,为使用 Happ 客户端应用的 Android 用户提供自定义模板和自定义标头。

其工作方式如下:

  1. 用户请求订阅
  2. Remnawave 识别出他正在 Android 上使用 Happ。
  3. 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) — 必填;ANDOR

    "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
      如果将此标志设置为 trueServe 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"
}
}
标头解析规则
  1. 标头名称不区分大小写
    "user-agent" === "User-Agent" === "USER-AGENT"
  2. 如果标头有多个值,它们将连接成一个字符串,以逗号分隔。
  3. 标头值缺失会导致规则被跳过。