Las expresiones regulares (REGEX) se utilizan en condiciones de coincidencia para reglas de equilibrador de carga.
Los patrones REGEX de estilo PCRE (expresiones regulares compatibles con Perl) se admiten con algunas limitaciones en los casos de uso avanzado. Cuando se utiliza REGEX en condiciones de coincidencia, se admiten grupos de captura con nombre.
Estas son las restricciones de REGEX:
- No se admiten uniones ni intersecciones de caracteres. Por ejemplo, no utilice [a-z[0-9]] ni [a-z&&[aeiou]]; en su lugar, use [a-z0-9] y [aeiou], respectivamente.
- Solo se admiten 9 referencias inversas, y se pueden usar de \1 a \9 para hacer referencia a ellas.
- Utilice el formato \0dd para hacer coincidir caracteres octales, no el formato \ddd.
- No se admiten marcas integradas en el nivel superior; este tipo de marca solo se admite en los grupos. Por ejemplo, no utilice "Case (?i:s)ensitive"; en su lugar, use "Case ((?i:s)ensitive)".
- No se admiten las operaciones de preprocesamiento \l \u, \L ni \U. Donde \l indica que el siguiente carácter será una minúscula; \u indica que el siguiente carácter será una mayúscula; \L indica que el texto estará en minúscula hasta \E; y, por último, \U indica que el texto estará en mayúscula hasta \E.
- (?(condition)X), (?{code}), (??{Code}) y (?#comment) no se admiten.
- No se admite la clase de carácter Unicode predefinida \X.
- No se admiten construcciones de caracteres con nombre para los caracteres Unicode. Por ejemplo, no utilice \N{name}; en su lugar, use \u2018.
Cuando se utiliza REGEX en condiciones de coincidencia, se admiten grupos de captura con nombre. Por ejemplo, el patrón de coincidencia REGEX /news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/?(<article>.*) se puede utilizar para hacer coincidir un URI como /news/2018-06-15/news1234.html.
A continuación, las variables se establecen como se indica a continuación: $year = "2018" $month = "06" $day = "15" $article = "news1234.html". Después de definir las variables, estas se pueden utilizar en las acciones de regla del equilibrador de carga. Por ejemplo, el URI se puede reescribir con las variables de coincidencia como /news.py?year=$year&month=$month&day=$day&article=$article. Seguidamente, el URI se reescribirá como /news.py?year=2018&month=06&day=15&article=news1234.html.
Las acciones de reescritura pueden utilizar una combinación de grupos de captura con nombre y variables integradas. Por ejemplo, el URI se puede reescribir como /news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr. A continuación, el URI de ejemplo se reescribirá como /news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1.
Nota: Para los grupos de captura con nombre, el nombre no puede comenzar con el carácter "_".Además de los grupos de captura con nombre, se pueden usar las siguientes variables integradas en las acciones de reescritura. Todos los nombres de las variables integradas comienzan con _.- $_args: los argumentos de la solicitud.
- $_arg_<nombre>: el <nombre> del argumento de la línea de solicitud.
- $_cookie_<nombre>: el valor de la cookie <nombre>.
- $_upstream_cookie_<nombre>: la cookie con el nombre especificado que envía el servidor upstream del campo de encabezado de respuesta "Set-Cookie".
- $_upstream_http_<nombre>: un campo de encabezado de respuesta arbitrario, y <nombre> es el nombre del campo convertido en minúscula con guiones reemplazados por guiones bajos.
- $_host (en orden de precedencia): el nombre de host de la línea de la solicitud, el nombre de host del campo "Host" del encabezado de la solicitud, o el nombre del servidor que coincida con una solicitud.
- $_http_<nombre>: un campo de encabezado de la solicitud arbitrario, y <nombre> es el nombre del campo en minúscula con guiones reemplazados por guiones bajos.
- $_https: "on" si la conexión funciona en modo SSL; de lo contrario, "".
- $_is_args: "?" si una línea de la solicitud tiene argumentos; de lo contrario, "".
- $_query_string: igual que $_args.
- $_remote_addr: la dirección del cliente.
- $_remote_port: el puerto del cliente.
- $_request_uri: el URI completo de la solicitud original (con argumentos).
- $_scheme: el esquema de la solicitud, "http" o "https".
- $_server_addr: la dirección del servidor que aceptó una solicitud.
- $_server_name: el nombre del servidor que aceptó una solicitud.
- $_server_port: el puerto del servidor que aceptó una solicitud.
- $_server_protocol: el protocolo de solicitud; suele ser "HTTP/1.0" o "HTTP/1.1".
- $_ssl_client_escaped_cert: devuelve el certificado de cliente en formato PEM para una conexión SSL establecida.
- $_ssl_server_name: devuelve el nombre del servidor solicitado mediante la SNI.
- $_uri: la ruta del URI de la solicitud.
- $_ssl_ciphers: devuelve los cifrados SSL de cliente
- $_ssl_client_i_dn: devuelve la cadena "DN de emisor" del certificado de cliente para una conexión SSL establecida de acuerdo con RFC 2253
- $_ssl_client_s_dn: devuelve la cadena "DN de asunto" del certificado de cliente para una conexión SSL establecida de acuerdo con RFC 2253
- $_ssl_protocol: devuelve el protocolo de una conexión SSL establecida
- $_ssl_session_reused: devuelve "r" si se reutilizó una sesión SSL, o "." en el resto de casos