メインコンテンツまでスキップ

レスポンスルール

警告

変更内容について不確かな場合は、慎重に進めてください。誤った変更はシステムを停止させる可能性があります。

レスポンスルール(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) — 必須;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ソケット接続を切断する
  • 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 を受け入れられると Panel が認識したクライアントアプリに対して 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
OS固有のテンプレートを提供する

異なる OS に対して異なるテンプレートで応答することができます。

以下の例では、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. ヘッダーの値が欠落している場合、ルールはスキップされます。