ADC

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 . Es folgt ein Beispiel: http.req.header („Cache-Control“) .contains („no-cache“)
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.
Grundelemente eines erweiterten Richtlinienausdrucks