Con servidores virtuales de capa 7, opcionalmente, puede configurar reglas de equilibrador de carga y personalizar el comportamiento de equilibrio de carga mediante reglas de coincidencia o de acción.
Las reglas del equilibrador de carga admiten REGEX para los tipos de coincidencia. Los patrones REGEX de estilo PCRE 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.
- $_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_cert: devuelve el certificado de cliente en formato PEM para una conexión SSL establecida con cada línea, exceptuando la primera antecedida por el carácter de tabulación.
- $_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
Requisitos previos
Compruebe que haya disponible un servidor virtual de capa 7. Consulte Configurar servidores virtuales de capa 7 en el modo Manager.