Antwortregeln
Wenn Sie sich über die vorgenommenen Änderungen nicht sicher sind, gehen Sie bitte vorsichtig vor. Falsche Änderungen können das System beeinträchtigen.
Antwortregeln (SRR) sind eine geordnete (von oben nach unten; wenn die Regel zutrifft, wird die Auswertung gestoppt), JSON-basierte Menge von Regeln, die das Backend für eingehende Abonnementanfragen auswertet.
Antwortregeln überschreiben die Konfiguration externer Squads.
Eine benutzerdefinierte Antwortregel erstellen
Lassen Sie uns eine benutzerdefinierte Antwortregel erstellen, die einem Android-Benutzer mit der Happ-Client-App ein benutzerdefiniertes Template und einen benutzerdefinierten Header gibt.
Sie sollte etwa so aussehen:
- Der Benutzer fordert ein Abonnement an.
- Remnawave erkennt, dass er Happ auf Android verwendet.
- Remnawave antwortet mit einem benutzerdefinierten
Happ Android-Template und fügt den benutzerdefinierten HeaderHappTheBestAppOnTheWorldhinzu.
So könnte die Regel aussehen:
{
"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
Jede Regel ist ein Objekt mit den folgenden Feldern:
-
name(Zeichenkette) — erforderlich; 1..50 Zeichen"name": "Block Legacy Clients" -
description(Zeichenkette) — optional; max. 250 Zeichen"description": "Blocks requests from legacy clients" -
enabled(Boolean) — erforderlich
Steuert, ob die Regel aktiv ist. Beifalsewird die Regel während der Auswertung übersprungen."enabled": true -
operator(Enum) — erforderlich;ANDoderOR"operator": "AND" // Rule matches only if ALL conditions match
"operator": "OR" // Rule matches if ANY condition matches -
conditions(Array)
Liste der auszuwertenden Bedingungen."conditions": [] // Empty = match everything (use for fallback rules) -
responseType(Enum) — erforderlich
Bestimmt, welche Antwort gesendet wird, wenn die Regel zutrifft:Typ Beschreibung MIHOMOMihomo YAML-Konfiguration CLASHClash YAML-Konfiguration STASHStash YAML-Konfiguration SINGBOXSing-box JSON-Konfiguration XRAY_JSONXray JSON-Konfiguration XRAY_BASE64Base64-kodierte Xray-Konfiguration BROWSERHTML-Seite für Browser BLOCKHTTP 403 Verboten STATUS_CODE_404HTTP 404 Nicht gefunden STATUS_CODE_451HTTP 451 Aus rechtlichen Gründen nicht verfügbar SOCKET_DROPSocket-Verbindung trennen -
responseModifications(Array) - optional
Zusätzliche Änderungen, die auf die Antwort angewendet werden. Kann verwendet werden, um ein benutzerdefiniertes Template oder Header bereitzustellen.subscriptionTemplate(Zeichenkette) - optional
Ein bestimmtes Template festlegen, das bereitgestellt wird, wenn die Regel zutrifft.headers(Array) - optional
Mit einem benutzerdefinierten Header antworten.key(Zeichenkette) - optional
Header-Name.value(Zeichenkette) - optional
Header-Wert.
applyHeadersToEnd(Boolean) - optional
Standardmäßig werden Header beim Erstellen der Antwort hinzugefügt. In einigen Fällen können Header aus anderen Systemteilen (wie externe Squads) die in SRR gesetzten Header überschreiben. Wenn Sie dieses Flag auftruesetzen, werden SRR-Header am Ende, kurz vor dem Senden der Antwort, hinzugefügt. In diesem Fall können SRR-Header Header aus anderen Abschnitten überschreiben.ignoreHostXrayJsonTemplate(Boolean) - optional
Jeder Host kann sein eigenes Xray Json-Template haben. Wenn Sie dieses Flag auftruesetzen, wird das von SRR definierte Xray Json-Template verwendet. Das Xray Json-Template des Hosts wird ignoriert.ignoreServeJsonAtBaseSubscription(Boolean) - optional
In bestimmten Szenarien möchten Sie möglicherweiseXRAY_BASE64an Client-Apps liefern, die vom Panel als fähig erkannt werden,XRAY_JSONzu akzeptieren, wennServe JSON at Base Subscriptionaktiviert ist.
Wenn Sie dieses Flag auftruesetzen, wird die EinstellungServe JSON at Base Subscriptionignoriert (auffalsegesetzt).
"responseType": "SINGBOX",
"responseModifications": {
"applyHeadersToEnd": true,
"headers": [
{
"key": "X-Custom-Header",
"value": "CustomValue"
}
],
"ignoreHostXrayJsonTemplate": true,
"ignoreServeJsonAtBaseSubscription": true,
"subscriptionTemplate": "Singbox Legacy"
}
rules.conditions
-
headerName(Zeichenkette) — erforderlich
Der zu prüfende HTTP-Header. Muss RFC 7230 entsprechen."headerName": "user-agent" // Client app user-agent -
operator(Enum) — erforderlich
Durchzuführende Vergleichsoperation:Operator Beschreibung EQUALSGenaue Übereinstimmung NOT_EQUALSUmgekehrte genaue Übereinstimmung CONTAINSTeilzeichenkette vorhanden NOT_CONTAINSTeilzeichenkette nicht vorhanden STARTS_WITHPräfix-Übereinstimmung NOT_STARTS_WITHKein Präfix ENDS_WITHSuffix-Übereinstimmung NOT_ENDS_WITHKein Suffix REGEXRegulärer Ausdruck NOT_REGEXUmgekehrter regulärer Ausdruck -
value(Zeichenkette) — erforderlich; 1..255 Zeichen
Der Wert, der mit dem Header-Wert verglichen wird."value": "^sfa|sfi|sfm|sft|karing|singbox|rabbithole" -
caseSensitive(Boolean) — erforderlich"caseSensitive": true // The value is compared as is
"caseSensitive": false // The value is lowercased before comparison
Sie können ganz einfach mit verschiedenen Templates auf verschiedene Betriebssysteme antworten.
Im folgenden Beispiel erhalten iOS-Benutzer ein Happ iOS-JSON und Android-Benutzer ein 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"
}
}
- Header-Namen sind nicht case-sensitiv
"user-agent" === "User-Agent" === "USER-AGENT" - Wenn ein Header mehrere Werte hat, werden diese zu einer einzelnen Zeichenkette zusammengefasst, getrennt durch Kommas.
- Fehlende Header-Werte führen dazu, dass die Regel übersprungen wird.