ADC

Elementos básicos de una expresión de directiva avanzada

Una expresión de directiva avanzada consiste, como mínimo, en un prefijo (o en un único elemento que se utiliza en lugar de un prefijo). La mayoría de las expresiones también especifican una operación que debe realizarse en los datos que identifica el prefijo. Puede formatear una expresión de hasta 1499 caracteres de la siguiente manera:

<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]

donde

  • <prefix>

    es un punto de anclaje para iniciar una expresión.

    El prefijo es una clave delimitada por puntos que identifica una unidad de datos. Por ejemplo, el siguiente prefijo examina las solicitudes HTTP para detectar la presencia de un encabezado denominado Content-Type:

    http.req.header(“Content-Type”)

    Los prefijos también se pueden usar por sí solos para devolver el valor del objeto que identifica el prefijo.

  • <operation>

    identifica una evaluación que se va a realizar en los datos identificados por el prefijo.

    Por ejemplo, considere la siguiente expresión:

    http.req.header(“Content-Type”).eq(“text/html”)

    En esta expresión, el siguiente es el componente del operador:

    eq(“text/html”)

    Este operador hace que NetScaler evalúe cualquier solicitud HTTP que contenga un encabezado Content-Type y, en particular, determine si el valor de este encabezado es igual a la cadena “text/html”. Para obtener más información, consulte “Operaciones.”

  • <compound-operator>

    es un operador booleano o aritmético que forma una expresión compuesta a partir de varios elementos de prefijo o prefijo.operation.

    Por ejemplo, considere la siguiente expresión:

    http.req.header(“Content-Type”).eq(“text/html”) && http.req.url.contains(“.html”)

Prefijos

Un prefijo de expresión representa un dato discreto. Por ejemplo, un prefijo de expresión puede representar una URL HTTP, un encabezado de cookie HTTP o una cadena en el cuerpo de una solicitud HTTP POST. Un prefijo de expresión puede identificar y devolver una amplia variedad de tipos de datos, incluidos los siguientes:

  • Una dirección IP de cliente en un paquete TCP/IP
  • Hora del sistema NetScaler
  • Una llamada externa a través de HTTP
  • Un tipo de registro TCP o UDP

En la mayoría de los casos, el prefijo de una expresión comienza con una de las siguientes palabras clave:

  • CLIENTE:
    • Identifica una característica del cliente que envía una solicitud o recibe una respuesta, como en los siguientes ejemplos:
    • El prefijo client.ip.dst designa la dirección IP de destino en la solicitud o la respuesta.
    • El prefijo client.ip.src designa la dirección IP de origen.
  • HTTP:
    • Identifica un elemento en una solicitud o respuesta HTTP, como en los siguientes ejemplos:
    • El prefijo http.req.body (integer) designa el cuerpo de la solicitud HTTP como un objeto de texto multilínea, hasta la posición del carácter designada en número entero.
    • El prefijo http.req.header (“header_name”) designa un encabezado HTTP, tal como se especifica en header_name.
    • El prefijo http.req.url designa una URL HTTP en formato URL codificado.
  • SERVIDOR:

    Identifica un elemento del servidor que está procesando una solicitud o enviando una respuesta.

  • DICE:

    Identifica una característica de NetScaler que procesa el tráfico.

    Nota: Tenga en cuenta que las directivas de DNS solo admiten objetos SYS, CLIENT y SERVER.

    Además, en NetScaler Gateway, la función VPN sin cliente puede utilizar los siguientes tipos de prefijos:

  • TEXTO:

    Identifica cualquier elemento de texto de una solicitud o una respuesta.

  • OBJETIVO:

    Identifica el destino de una conexión.

  • URL:

    Identifica un elemento en la parte URL de una solicitud o respuesta HTTP.

Como regla general, cualquier prefijo de expresión puede ser una expresión autónoma. Por ejemplo, el prefijo siguiente es una expresión completa que devuelve el contenido del encabezado HTTP especificado en el argumento de cadena (entre comillas):

http.res.header.("myheader")

También puede combinar prefijos con operaciones sencillas para determinar los valores VERDADERO y FALSO. Por ejemplo, lo siguiente devuelve un valor de VERDADERO o FALSO:

http.res.header.("myheader").exists

También puede utilizar operaciones complejas en prefijos individuales y en varios prefijos de una expresión, como en el siguiente ejemplo:

http.req.url.length + http.req.cookie.length <= 500

Los prefijos de expresión que puede especificar dependen de la función NetScaler. En la siguiente tabla se describen los prefijos de expresión que son de interés por función.

Función Tipos de prefijos de expresión utilizados en la función
DNS SYS, CLIENTE, SERVIDOR
Funciones de protección del respondedor HTTP, SYS, CLIENTE
Conmutación de contenido HTTP, SYS, CLIENTE
Reescritura HTTP, SYS, CLIENTE, SERVIDOR, URL, TEXTO, DESTINO, VPN
Almacenamiento en caché integrado HTTP, SYS, CLIENTE, SERVIDOR
NetScaler Gateway, acceso sin cliente HTTP, SYS, CLIENTE, SERVIDOR, URL, TEXTO, DESTINO, VPN

Tabla 1. Tipos de prefijos de expresión permitidos en varias funciones de NetScaler

Nota: Para obtener más información sobre los prefijos de expresión permitidos en una función, consulte la documentación de esa función.

Expresiones de un solo elemento

El tipo más simple de expresión de directiva avanzada contiene un solo elemento. Este elemento puede ser uno de los siguientes:

  • cierto. Una expresión de directiva avanzada puede consistir simplemente en el valor true. Este tipo de expresión siempre devuelve el valor VERDADERO. Es útil para encadenar acciones directivas y activar expresiones de Goto.
  • falso. Una expresión de directiva avanzada puede consistir simplemente en el valor false. Este tipo de expresión siempre devuelve el valor FALSE.
  • Prefijo para una expresión compuesta. Por ejemplo, el prefijo HTTP.REQ.HOSTNAME es una expresión completa que devuelve un nombre de host y HTTP.REQ.URL es una expresión completa que devuelve una URL. El prefijo también podría usarse junto con operaciones y prefijos adicionales para formar una expresión compuesta.

Operaciones

En la mayoría de las expresiones, también se especifica una operación en los datos que identifica el prefijo. Por ejemplo, supongamos que especifica el siguiente prefijo:

http.req.url

Este prefijo extrae las URL de las solicitudes HTTP. Este prefijo de expresión no requiere el uso de ningún operador en una expresión. Sin embargo, al configurar una expresión que procese las URL de las solicitudes HTTP, puede especificar operaciones que analicen las características particulares de la URL. A continuación se presentan algunas posibilidades:

  • Busque un nombre de host concreto en la URL.
  • Busca una ruta determinada en la URL.
  • Evalúa la longitud de la URL.
  • Busca una cadena en la URL que indique una marca horaria y conviértela a GMT.

A continuación se muestra un ejemplo de un prefijo que identifica un encabezado HTTP denominado Servidor y una operación que busca la cadena IIS en el valor del encabezado:

http.res.header("Server").contains("IIS")

A continuación se muestra un ejemplo de un prefijo que identifica los nombres de los servidores y de una operación que busca la cadena “www.mycompany.com” como valor del nombre:

http.req.hostname.eq("www.mycompany.com")

Operaciones básicas sobre prefijos de expresiones

La siguiente tabla describe algunas de las operaciones básicas que se pueden realizar en los prefijos de expresión.

Operación Determina si o no
CONTAINS() El objeto coincide con . El siguiente es un ejemplo: http.req.header ("Cache-Control") .contains ("no-cache")
EXISTS Un elemento concreto está presente en un objeto. El siguiente es un ejemplo: http.res.header (“myHDR”) .exists
EQ() Un valor no numérico concreto está presente en un objeto. El siguiente es un ejemplo: http.req.method.eq (post)
EQ() Un valor numérico concreto está presente en un objeto. El siguiente es un ejemplo: client.ip.dst.eq (10.100.10.100)
LT() El valor de un objeto es inferior a un valor concreto. El siguiente es un ejemplo: http.req.content_length.lt (5000)
GT() El valor de un objeto es mayor que un valor concreto. El siguiente es un ejemplo: http.req.content_length.gt (5)

En la siguiente tabla se resumen algunos de los tipos de operaciones disponibles.

Tipo de operación Descripción
Operaciones de texto Haga coincidir cadenas individuales y conjuntos de cadenas con cualquier parte de un objetivo. El destino puede ser una cadena completa, el principio de una cadena o cualquier parte del texto entre el principio y el final de la cadena. Por ejemplo, puede extraer la cadena “XYZ” de “XYZSomeText”. O bien, puede comparar el valor de un encabezado HTTP con una matriz de cadenas diferentes. También puede transformar texto en otro tipo de datos. Los siguientes son algunos ejemplos: transforme una cadena en un valor entero, cree una lista a partir de las cadenas de consulta de una URL y transforme una cadena en un valor de tiempo.
Operaciones numéricas Las operaciones numéricas incluyen la aplicación de operadores aritméticos, la evaluación de la longitud del contenido, el número de elementos de una lista, fechas, horas y direcciones IP.
Elementos básicos de una expresión de directiva avanzada