Grundelemente eines erweiterten Richtlinienausdrucks
Ein erweiterter Richtlinienausdruck besteht mindestens aus einem Präfix (oder einem einzelnen Element, das anstelle eines Präfixes verwendet wird). Die meisten Ausdrücke geben auch eine Operation an, die an den Daten ausgeführt werden soll, die das Präfix identifiziert. Sie formatieren einen Ausdruck mit bis zu 1.499 Zeichen wie folgt:
<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]
wobei
-
<prefix>
ist ein Ankerpunkt für den Beginn eines Ausdrucks.
Das Präfix ist ein durch Punkte getrennter Schlüssel, der eine Dateneinheit identifiziert. Das folgende Präfix untersucht beispielsweise HTTP-Anfragen auf das Vorhandensein eines Headers namens Content-Type:
http.req.header („Inhaltstyp“)
Präfixe können auch einzeln verwendet werden, um den Wert des Objekts zurückzugeben, das das Präfix identifiziert.
-
<operation>
identifiziert eine Bewertung, die an den durch das Präfix identifizierten Daten durchgeführt werden soll.
Stellen Sie sich zum Beispiel den folgenden Ausdruck vor:
http.req.header („Inhaltstyp“) .eq („text/html“)
In diesem Ausdruck ist Folgendes die Operatorkomponente:
eq („text/html“)
Dieser Operator bewirkt, dass NetScaler alle HTTP-Anforderungen auswertet, die einen Content-Type-Header enthalten, und insbesondere, um festzustellen, ob der Wert dieses Headers gleich der Zeichenfolge text/html ist. Weitere Informationen finden Sie unter “Operationen. “
-
<compound-operator>
ist ein boolescher oder arithmetischer Operator, der aus mehreren Präfix- oder Präfix.operationselementen einen zusammengesetzten Ausdruck bildet.
Stellen Sie sich zum Beispiel den folgenden Ausdruck vor:
http.req.header („Inhaltstyp“) .eq („text/html“) & http.req.url.contains („.html“)
Präfixe
Ein Ausdruckspräfix steht für ein diskretes Datenelement. Ein Ausdruckspräfix kann beispielsweise eine HTTP-URL, einen HTTP-Cookie-Header oder eine Zeichenfolge im Hauptteil einer HTTP-POST-Anforderung darstellen. Ein Ausdruckspräfix kann eine Vielzahl von Datentypen identifizieren und zurückgeben, darunter die folgenden:
- Eine Client-IP-Adresse in einem TCP/IP-Paket
- NetScaler-Systemzeit
- Ein externes Callout über HTTP
- Ein TCP- oder UDP-Datensatztyp
In den meisten Fällen beginnt ein Ausdruckspräfix mit einem der folgenden Schlüsselwörter:
- KUNDE:
- Identifiziert ein Merkmal des Clients, das entweder eine Anfrage sendet oder eine Antwort empfängt, wie in den folgenden Beispielen:
- Das Präfix client.ip.dst bezeichnet die Ziel-IP-Adresse in der Anfrage oder Antwort.
- Das Präfix client.ip.src bezeichnet die Quell-IP-Adresse.
- HTTP:
- Identifiziert ein Element in einer HTTP-Anfrage oder einer Antwort, wie in den folgenden Beispielen:
- Das Präfix http.req.body (integer) bezeichnet den Hauptteil der HTTP-Anfrage als mehrzeiliges Textobjekt, bis zu der in Integer angegebenen Zeichenposition.
- Das Präfix http.req.header („header_name“) bezeichnet einen HTTP-Header, wie in header_name angegeben.
- Das Präfix http.req.url bezeichnet eine HTTP-URL im URL-kodierten Format.
-
SERVER:
Identifiziert ein Element auf dem Server, das entweder eine Anfrage verarbeitet oder eine Antwort sendet.
-
SAGT:
Identifiziert ein Merkmal des NetScaler, der den Datenverkehr verarbeitet.
Hinweis: Beachten Sie, dass DNS-Richtlinien nur SYS-, CLIENT- und SERVER-Objekte unterstützen.
Darüber hinaus kann die Clientless VPN-Funktion im NetScaler Gateway die folgenden Arten von Präfixen verwenden:
-
TEXT:
Identifiziert jedes Textelement in einer Anfrage oder Antwort.
-
ZIEL:
Identifiziert das Ziel einer Verbindung.
-
URL:
Identifiziert ein Element im URL-Teil einer HTTP-Anfrage oder -Antwort.
Als allgemeine Faustregel gilt, dass jedes Ausdruckspräfix ein eigenständiger Ausdruck sein kann. Das folgende Präfix ist beispielsweise ein vollständiger Ausdruck, der den Inhalt des HTTP-Headers zurückgibt, der im Zeichenfolgenargument angegeben ist (in Anführungszeichen eingeschlossen):
http.res.header.("myheader")
Oder Sie können Präfixe mit einfachen Operationen kombinieren, um die Werte TRUE und FALSE zu ermitteln. Im Folgenden wird beispielsweise der Wert TRUE oder FALSE zurückgegeben:
http.res.header.("myheader").exists
Sie können auch komplexe Operationen für einzelne Präfixe und mehrere Präfixe innerhalb eines Ausdrucks verwenden, wie im folgenden Beispiel:
http.req.url.length + http.req.cookie.length <= 500
Welche Ausdruckspräfixe Sie angeben können, hängt von der NetScaler-Funktion ab. In der folgenden Tabelle werden die Ausdruckspräfixe beschrieben, die für jedes Feature von Interesse sind.
Feature | Typen von Ausdruckspräfixen, die im Feature verwendet werden |
---|---|
DNS | SYSTEM, CLIENT, SERVER |
Responder in den Schutzfunktionen | HTTP, SYS, CLIENT |
Content Switching | HTTP, SYS, CLIENT |
Rewrite | HTTP, SYS, CLIENT, SERVER, URL, TEXT, ZIEL, VPN |
Integriertes Caching | HTTP, SYS, CLIENT, SERVER |
NetScaler Gateway, Clientloser Zugriff | HTTP, SYS, CLIENT, SERVER, URL, TEXT, ZIEL, VPN |
Tabelle 1. Zulässige Arten von Ausdruckspräfixen in verschiedenen NetScaler-Funktionen
Hinweis: Einzelheiten zu den zulässigen Ausdruckspräfixen in einer Funktion finden Sie in der Dokumentation zu dieser Funktion.
Ausdrücke mit einem Element
Die einfachste Art von erweitertem Richtlinienausdruck enthält ein einzelnes Element. Bei diesem Element kann es sich um eines der folgenden Elemente handeln:
- wahr. Ein erweiterter Richtlinienausdruck kann einfach aus dem Wert true bestehen. Dieser Ausdruckstyp gibt immer den Wert TRUE zurück. Es ist nützlich, um politische Aktionen zu verketten und Goto-Ausdrücke auszulösen.
- falsch. Ein erweiterter Richtlinienausdruck kann einfach aus dem Wert false bestehen. Dieser Ausdruckstyp gibt immer den Wert FALSE zurück.
- Ein Präfix für einen zusammengesetzten Ausdruck. Beispielsweise ist das Präfix HTTP.REQ.HOSTNAME ein vollständiger Ausdruck, der einen Hostnamen zurückgibt, und HTTP.REQ.URL ist ein vollständiger Ausdruck, der eine URL zurückgibt. Das Präfix könnte auch in Verbindung mit Operationen und zusätzlichen Präfixen verwendet werden, um einen zusammengesetzten Ausdruck zu bilden.
Operationen
In den meisten Ausdrücken geben Sie auch eine Operation für die Daten an, die das Präfix identifiziert. Angenommen, Sie geben das folgende Präfix an:
http.req.url
Dieses Präfix extrahiert URLs in HTTP-Anfragen. Für dieses Ausdruckspräfix müssen keine Operatoren in einem Ausdruck verwendet werden. Wenn Sie jedoch einen Ausdruck konfigurieren, der HTTP-Anforderungs-URLs verarbeitet, können Sie Operationen angeben, die bestimmte Eigenschaften der URL analysieren. Im Folgenden sind einige Möglichkeiten aufgeführt:
- Suchen Sie in der URL nach einem bestimmten Hostnamen.
- Suchen Sie in der URL nach einem bestimmten Pfad.
- Bewerten Sie die Länge der URL.
- Suchen Sie in der URL nach einer Zeichenfolge, die einen Zeitstempel angibt, und konvertieren Sie sie in GMT.
Im Folgenden finden Sie ein Beispiel für ein Präfix, das einen HTTP-Header mit dem Namen Server identifiziert, und für eine Operation, die im Header-Wert nach der Zeichenfolge IIS sucht:
http.res.header("Server").contains("IIS")
Im Folgenden finden Sie ein Beispiel für ein Präfix, das Hostnamen identifiziert, und einen Vorgang, der nach der Zeichenfolge „www.mycompany.com“ als Wert des Namens sucht:
http.req.hostname.eq("www.mycompany.com")
Grundlegende Operationen mit Ausdruckspräfixen
In der folgenden Tabelle werden einige der grundlegenden Operationen beschrieben, die mit Ausdruckspräfixen ausgeführt werden können.
Vorgang | Bestimmt, ob oder nicht |
---|---|
CONTAINS( |
Das Objekt entspricht |
EXISTS | Ein bestimmtes Objekt ist in einem Objekt vorhanden. Es folgt ein Beispiel: http.res.header („myHDR“) .exists |
EQ( |
Ein bestimmter nichtnumerischer Wert ist in einem Objekt vorhanden. Es folgt ein Beispiel: http.req.method.eq (post) |
EQ( |
Ein bestimmter numerischer Wert ist in einem Objekt vorhanden. Es folgt ein Beispiel: client.ip.dst.eq (10.100.10.100) |
LT( |
Der Wert eines Objekts ist kleiner als ein bestimmter Wert. Es folgt ein Beispiel: http.req.content_length.lt (5000) |
GT( |
Der Wert eines Objekts ist größer als ein bestimmter Wert. Es folgt ein Beispiel: http.req.content_length.gt (5) |
In der folgenden Tabelle sind einige der verfügbaren Operationstypen zusammengefasst.
Art des Vorgangs | Beschreibung |
---|---|
Textoperationen | Ordnen Sie einzelne Zeichenketten und Zeichenketten einem beliebigen Teil eines Ziels zu. Das Ziel kann eine ganze Zeichenfolge, der Anfang einer Zeichenfolge oder ein beliebiger Textabschnitt zwischen dem Anfang und dem Ende der Zeichenfolge sein. Sie können beispielsweise die Zeichenfolge „XYZ“ aus „XYZSomeText“ extrahieren. Oder Sie können einen HTTP-Header-Wert mit einem Array verschiedener Zeichenketten vergleichen. Sie können Text auch in einen anderen Datentyp umwandeln. Im Folgenden finden Sie Beispiele: Transformieren Sie eine Zeichenfolge in einen Integer-Wert, erstellen Sie eine Liste aus den Abfragezeichenfolgen in einer URL und transformieren Sie eine Zeichenfolge in einen Zeitwert. |
Numerische Operationen | Numerische Operationen umfassen das Anwenden von arithmetischen Operatoren, das Auswerten der Inhaltslänge, die Anzahl der Elemente in einer Liste, Datums-, Uhrzeit- und IP-Adressen. |