Aprenda a utilizar la sintaxis de la regla de contenido (patrón) para el componente CBR, junto con los escenarios y ejemplos de su utilización.
Sintaxis de regla de contenido (patrón)
Atención: Sólo es aplicable si ha seleccionado contenido para el tipo de regla.
Entre la sintaxis de patrón que desea utilizar, con las restricciones siguientes:
- No se pueden utilizar espacios dentro del patrón
- Los caracteres especiales, a menos que preceda el carácter con una barra inclinada invertida (\):
- *
- Comodín (coincide con 0 a x en cualquier carácter)
- (
- Paréntesis izquierdo que se utiliza para la agrupación lógica
- )
- Paréntesis derecho que se utiliza para la agrupación lógica
- &
- AND lógico
- |
- OR lógico
- !
- NO lógico
Palabras clave reservadas
Las palabras claves reservadas siempre van seguidas de un signo igual "=".
- Método
- Método HTTP en la petición, por ejemplo GET, POST
- URI
- Vía de acceso de la petición URL (sensible a mayúsculas y minúsculas)
- Versión
- Versión específica de la petición, ya sea HTTP/1.0 o HTTP/1.1
- Sistema principal
- Valor del host: cabecera (no distingue entre mayúsculas y minúsculas)
Importante: Opcional en los protocolos HTTP/1.0
- <key>
- Cualquier nombre de cabecera HTTP válido que Dispatcher puede buscar. Ejemplos de cabeceras HTTP son User-Agent y Connection, Referrer
Un navegador que tiene como destino
http://www.company.com/path/webpage.htm puede dar como resultado valores, de la manera siguiente:
Method=GET
URI=/path/webpage.htm
Version=HTTP/1.1
Host=www.company.com
Connection=Keep-Alive
Referer=http://www.company.com/path/parentwebpage.htm
El shell del sistema operativo podría interpretar caracteres especiales, como
"&", y convertirlos en texto alternativo antes de que
cbrcontrol los evalúe. Si indica el mandato desde
dscontrol,
cbrcontrol o desde un archivo de configuración, utilice comillas (
" ") antes y después de los caracteres especiales.
Por ejemplo, el mandato siguiente puede ser válido sólo cuando se utiliza el indicador
cbrcontrol>> o de un archivo de configuración:
rule add 10.1.203.4@80@cbr_prod_rule_ek type content
pattern "uri=/nipoek/*"
Para que este mismo mandato funcione en el indicador del sistema operativo, debe incluir el mandato entre comillas dobles:
cbrcontrol "rule add 10.1.203.4@80@cbr_prod_rule_ek type content
pattern uri=/nipoek/*"
Si no se utilizan las comillas, alguna parte del patrón puede truncarse cuando la norma se guarda en CBR.
Casos prácticos y ejemplos para la utilización de sintaxis de patrón
Escenario 1
La configuración de un nombre de clúster implica un conjunto de servidores web para el contenido HTML estándar, otro conjunto de servidores web con WebSphere Application Server para peticiones de servlet y otro conjunto de servidores Lotus Notes para archivos NSF. Para distinguir entre estas páginas solicitadas es necesario tener acceso al cliente. También es necesario enviarlas a los servidores adecuados. Las reglas que coinciden con el patrón de contenido proporcionan la separación necesaria para realizar estas tareas. Para que la separación de las peticiones necesaria se produzca automáticamente, se configura una serie de normas. Por ejemplo, los siguientes mandatos realizan las tres separaciones antes mencionadas:
>>rule add cluster1@80@servlets type content pattern "uri=*/servlet/*" priority 1
>>rule uses cluster1@80@servlets server1+server2
>>rule add cluster1@80@notes type content pattern "uri=*.nsf*" priority 2
>>rule uses cluster1@80@notes server3+server4
Si una petición para un archivo NSF llega a Load Balancer, primero la examina la regla de servlets, pero no coincide. A continuación, la petición la examina la norma de notes y devuelve una coincidencia.
La carga del cliente está equilibrada entre server3 y server4.
Caso 2
Otro ejemplo común es cuando el sitio web principal controla varios grupos internos distintos. Por ejemplo,
www.empresa.com/software incluye un conjunto de servidores y un contenido distinto de la división
www.empresa.com/hardware. Puesto que las peticiones están basadas en el clúster de
www.empresa.com raíz, las reglas de contenido tienen que encontrar las diferencias de URI y completar el equilibrio de carga. La norma de escenario es similar a los ejemplos siguientes :
>>rule add cluster1@80@div1 type content pattern "uri=/software/*" priority 1
>>rule uses cluster1@80@div1 server1+server2
>>rule add cluster1@80@div2 type content pattern "uri=/hardware/*" priority 2
>>rule uses cluster1@80@div2 server3+server4
Escenario 3
Determinadas combinaciones son susceptibles al orden en el que se realiza la búsqueda en las normas.
Por ejemplo, en el Escenario 2, los clientes se han dividido en un directorio en su vía de petición; sin embargo, el directorio de destino puede visualizarse en varios niveles de la vía de acceso e indicar cosas distintas en la ubicación. Por ejemplo,
www.empresa.com/pcs/fixes/software es un destino distinto de
www.empresa.com/mainframe/fixes/software. Defina las reglas que deben responder a la posibilidad y no utilizar demasiados escenarios a la vez. Por ejemplo la prueba
uri=*/software/* es demasiado amplia de una búsqueda de comodín en este caso. Las reglas alternativas podrían estar estructuradas de la forma siguiente:
- Una búsqueda de combinación puede limitar esta búsqueda:
>>rule add cluster1@80@pcs type content pattern "(uri=/pcs/*)&(uri=*/software/*)"
>>rule uses cluster 1@80@pcs server1
- En los casos en los que no haya combinaciones, el orden pasa a ser importante:
>>rule add cluster1@80@pc1 type content pattern "uri=/pcs/*"
>>rule uses cluster1@80@pc1 server2
- La segunda norma detecta cuando "pcs" aparece en lugares de directorios posteriores en lugar del primero.
>>rule add cluster1@80@pc2 type content pattern "uri=/*/pcs/*"
>>rule uses cluster1@80@pc2 server3
- En casi cada caso, desea completar las normas con una norma siempre cierta por omisión para identificar todo lo que no puedan detectar otras normas. Esta regla también puede ser un servidor "Lo sentimos, el sitio está inactivo actualmente, por favor, vuelva a intentarlo más tarde" para escenarios donde todos los demás servidores fallan para este cliente.
>>rule add cluster1@80@sorry type true priority 100
>>rule uses cluster1@80@sorry server5