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.

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_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.

Procedimiento

  1. Abra el servidor virtual de capa 7.
  2. Vaya a la página Identificadores de servidor virtual.
  3. Introduzca el número de puerto y la dirección IP del servidor virtual.
    Puede especificar el número de puerto o un rango de puertos del servidor virtual.
  4. Complete los detalles de las propiedades avanzadas.
    Opción Descripción
    Máximo de conexiones simultáneas Establezca la cantidad máxima de conexiones simultáneas permitidas con un servidor virtual de modo que el servidor virtual no consuma recursos de otras aplicaciones alojadas en el mismo equilibrador de carga.
    Velocidad máxima de conexión nueva Establezca el máximo para la nueva conexión con un miembro del grupo de servidores de modo que un servidor virtual no consuma recursos.
    Puerto de miembro de grupo predeterminado Introduzca un puerto de miembro de grupo predeterminado si el puerto de miembro de grupo de un servidor virtual no está definido.

    Por ejemplo, si se define un servidor virtual con el rango de puertos 2000-2999 y el rango de puertos del miembro de grupo predeterminado se establece en 8000-8999, se envía una conexión de cliente entrante con el puerto de servidor virtual 2500 a un miembro del grupo con un puerto de destino establecido en 8500.

  5. (opcional) Seleccione un grupo de servidores predeterminado existente en el menú desplegable.
    El grupo de servidores consta de uno o varios servidores, denominados miembros de grupo, que están configurados de manera similar y ejecutan la misma aplicación.
  6. Haga clic en Agregar para configurar las reglas de equilibrador de carga para la fase de reescritura de solicitud HTTP.
    Los tipos de coincidencia compatibles son REGEX, STARTS_WITH, ENDS_WITH, entre otras, y la opción inversa.
    Condición de coincidencia compatible Descripción
    Método de solicitud HTTP Coincide con un método de solicitud HTTP.

    http_request.method: valor que debe coincidir.

    URI de solicitud HTTP Coincide con un URI de solicitud HTTP sin argumentos de consulta.

    http_request.uri: valor que debe coincidir.

    Argumentos de URI de solicitud HTTP Coincide con un argumento de consulta URI de solicitud HTTP.

    http_request.uri_arguments: valor que debe coincidir.

    Versión de solicitud HTTP Coincide con una versión de solicitud HTTP.

    http_request.version: valor que debe coincidir.

    Encabezado de solicitud HTTP Coincide con cualquier encabezado de solicitud HTTP.

    http_request.header_name: nombre de encabezado que debe coincidir.

    http_request.header_value: valor que debe coincidir.

    Carga de solicitud HTTP Coincide con el contenido del cuerpo de la solicitud HTTP.

    http_request.body_value: valor que debe coincidir.

    Campos de encabezado TCP Coincide con un puerto TCP de origen o destino.

    tcp_header.source_port: puerto de origen que debe coincidir.

    tcp_header.destination_port: puerto de destino que debe coincidir.

    Campos de encabezado IP Coincide con una dirección IP de origen o destino.

    ip_header.source_address: dirección de origen que debe coincidir.

    ip_header.destination_address: dirección de destino que debe coincidir.

    Acción Descripción
    Reescritura de URI de solicitud HTTP Modifica un URI.

    http_request.uri: URI (sin argumentos de consulta) que se debe escribir.

    http_request.uri_args: argumentos de consulta URI que se deben escribir.

    Reescritura de encabezado de solicitud HTTP Modifica el valor de un encabezado HTTP.

    http_request.header_name: nombre de encabezado.

    http_request.header_value: valor que se debe escribir.

  7. Haga clic en Agregar para configurar las reglas de equilibrador de carga para el reenvío de solicitud HTTP.
    Todos los valores de coincidencia aceptan expresiones regulares.
    Condición de coincidencia compatible Descripción
    Método de solicitud HTTP Coincide con un método de solicitud HTTP.

    http_request.method: valor que debe coincidir.

    URI de solicitud HTTP Coincide con un URI de solicitud HTTP.

    http_request.uri: valor que debe coincidir.

    Argumentos de URI de solicitud HTTP Coincide con un argumento de consulta URI de solicitud HTTP.

    http_request.uri_args: valor que debe coincidir.

    Versión de solicitud HTTP

    Coincide con una versión de solicitud HTTP.

    http_request.version: valor que debe coincidir.

    Encabezado de solicitud HTTP

    Coincide con cualquier encabezado de solicitud HTTP.

    http_request.header_name: nombre de encabezado que debe coincidir.

    http_request.header_value: valor que debe coincidir.

    Carga de solicitud HTTP

    Coincide con el contenido del cuerpo de la solicitud HTTP.

    http_request.body_value: valor que debe coincidir.

    Campos de encabezado TCP

    Coincide con un puerto TCP de origen o destino.

    tcp_header.source_port: puerto de origen que debe coincidir.

    tcp_header.destination_port: puerto de destino que debe coincidir.

    Campos de encabezado IP

    Coincide con una dirección IP de origen.

    ip_header.source_address: dirección de origen que debe coincidir.

    Acción Descripción
    Rechazar Rechaza una solicitud, por ejemplo, estableciendo el estado en 5xx.

    http_forward.reply_status: código de estado HTTP utilizado para el rechazo.

    http_forward.reply_message: mensaje de rechazo de HTTP.

    Redirigir Redirige una solicitud. El código de estado debe establecerse en 3xx.

    http_forward.redirect_status: código de estado HTTP de redirección.

    http_forward.redirect_url: URL de redirección de HTTP.

    Seleccionar grupo

    Fuerza la solicitud a un grupo de servidores específicos. El algoritmo configurado del miembro del grupo especificado (predictor) se utiliza para seleccionar un servidor del grupo de servidores.

    http_forward.select_pool: UUID de grupo de servidores.

  8. Haga clic en Agregar para configurar las reglas de equilibrador de carga para la reescritura de respuesta HTTP.
    Todos los valores de coincidencia aceptan expresiones regulares.
    Condición de coincidencia compatible Descripción
    Encabezado de respuesta HTTP Coincide con cualquier encabezado de respuesta HTTP.

    http_response.header_name: nombre del encabezado que debe coincidir.

    http_response.header_value: valor que debe coincidir.

    Acción Descripción
    Reescritura de encabezado de respuesta HTTP Modifica el valor del encabezado de una respuesta HTTP.

    http_response.header_name: nombre de encabezado.

    http_response.header_value: valor que se debe escribir.

  9. (opcional) Haga clic en Siguiente para configurar perfiles de equilibrio de carga.
  10. Haga clic en Finalizar.