Reescritura de encabezados de solicitud y respuesta HTTP con Azure Application Gateway: Azure PowerShell

En este artículo se describe cómo usar Azure PowerShell para configurar una instancia de SKU de Application Gateway v2 para reescribir encabezados HTTP en solicitudes y respuestas. La reescritura de encabezados permite agregar, quitar o actualizar encabezados HTTP mientras los paquetes de solicitud y respuesta se mueven entre los grupos de cliente y back-end.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Prerrequisitos

Antes de comenzar, asegúrese de que tiene los siguientes requisitos:

  • Azure PowerShell: necesita que Azure PowerShell esté instalado localmente o acceda a Azure Cloud Shell. Se requiere el módulo Az de Azure PowerShell versión 1.0.0 o posterior. Para comprobar la versión, ejecute Get-Module -ListAvailable Az. Si necesita actualizar, consulte Instalación del módulo de Azure PowerShell.
  • Conexión de Azure: después de comprobar la versión de PowerShell, ejecute Connect-AzAccount para autenticarse con Azure.
  • Application Gateway v2: necesita una instancia de SKU de Application Gateway v2 existente. La reescritura de encabezado solo se admite en la SKU v2 (Standard_v2 o WAF_v2). Si no tiene una, cree una instancia de SKU de Application Gateway v2 antes de comenzar.
  • Permisos adecuados: asegúrese de que tiene permisos de colaborador o propietario en el recurso de Application Gateway.

Importante

La funcionalidad de reescritura de encabezado solo está disponible con la SKU de Application Gateway v2. La SKU v1 no admite esta característica.

Descripción de los componentes de reescritura de encabezado HTTP

Para configurar la reescritura del encabezado HTTP, debe comprender y crear los siguientes componentes en un orden específico:

Componentes principales

  1. RequestHeaderConfiguration: especifica los campos de encabezado de solicitud que desea reescribir y sus nuevos valores. Use este componente para modificar los encabezados en las solicitudes de cliente antes de llegar a los servidores back-end.

  2. ResponseHeaderConfiguration: especifica los campos de encabezado de respuesta que desea reescribir y sus nuevos valores. Use este componente para modificar los encabezados en las respuestas del servidor antes de llegar al cliente.

  3. ActionSet: contiene las configuraciones de los encabezados de solicitud y respuesta especificados. Cada conjunto de acciones representa una colección de modificaciones de encabezado que se van a realizar.

    • Condición: una configuración opcional. Las condiciones de reescritura evalúan el contenido de las solicitudes y respuestas HTTP(S). La acción de reescritura se produce si la solicitud o respuesta HTTP(S) coincide con la condición de reescritura.

    Nota:

    Varias condiciones asociadas a una acción usan la operación AND lógica: todas las condiciones deben cumplirse para que se ejecute la acción.

  4. Regla de Reescritura: combina varias acciones de reescritura y condiciones de reescritura. Cada regla define cuándo y cómo modificar encabezados.

  5. RuleSequence (opcional): determina el orden de ejecución cuando tiene varias reglas de reescritura en un conjunto de reescritura. Las reglas con valores de secuencia inferiores se ejecutan primero. Si no especifica un valor, el valor predeterminado es 100.

    Advertencia

    Si asigna el mismo valor de secuencia a varias reglas, el orden de ejecución se convierte en no determinista.

  6. RewriteRuleSet: contiene varias reglas reescritas asociadas a una regla de enrutamiento de solicitudes.

Ámbito de la aplicación

El ámbito de configuración de reescritura depende del tipo de regla de enrutamiento:

  • Regla de enrutamiento básica: la configuración de reescritura de encabezados se aplica globalmente a todas las solicitudes del agente de escucha asociado.
  • Regla de enrutamiento basada en rutas: la configuración de reescritura de encabezado solo se aplica a las solicitudes que coinciden con patrones específicos de rutas de acceso de URL definidos en el mapa de rutas de acceso de URL.

Importante

Puede crear varios conjuntos de reescritura de encabezado HTTP y aplicar cada conjunto a varios agentes de escucha, pero solo se puede aplicar un conjunto de reescritura a un agente de escucha específico.

Autenticación con Azure

Antes de configurar las reglas de reescritura de encabezados, autentíquese con Azure y seleccione la suscripción:

Connect-AzAccount
Select-AzSubscription -Subscription "<sub name>"

Especificar la configuración de la regla de reescritura del encabezado HTTP

En este ejemplo, se modifica una dirección URL de redireccionamiento mediante la reescritura del encabezado de ubicación en la respuesta HTTP siempre que el encabezado de ubicación contiene una referencia a azurewebsite.net. Para realizar esta modificación, agregamos una condición para evaluar si el encabezado de ubicación de la respuesta contiene azurewebsite.net. Usamos el patrón (https?)://.*azurewebsite.net(.*)$. Y usamos {http_resp_Location_1}://contoso.com{http_resp_Location_2} como valor de encabezado. Este valor reemplaza azurewebsite.net por contoso.com en el encabezado de ubicación.

$responseHeaderConfiguration = New-AzApplicationGatewayRewriteRuleHeaderConfiguration -HeaderName "Location" -HeaderValue "{http_resp_Location_1}://contoso.com{http_resp_Location_2}"
$actionSet = New-AzApplicationGatewayRewriteRuleActionSet -ResponseHeaderConfiguration $responseHeaderConfiguration
$condition = New-AzApplicationGatewayRewriteRuleCondition -Variable "http_resp_Location" -Pattern "(https?):\/\/.*azurewebsite\.net(.*)$" -IgnoreCase
$rewriteRule = New-AzApplicationGatewayRewriteRule -Name LocationHeader -ActionSet $actionSet -Condition $condition
$rewriteRuleSet = New-AzApplicationGatewayRewriteRuleSet -Name LocationHeaderRewrite -RewriteRule $rewriteRule

Recuperación de la configuración de la puerta de enlace de aplicaciones

$appgw = Get-AzApplicationGateway -Name "AutoscalingAppGw" -ResourceGroupName "<rg name>"

Recuperación de la configuración de la regla de enrutamiento de solicitudes

Obtenga la regla de enrutamiento de solicitudes específica en la que desea aplicar la configuración de reescritura del encabezado:

$reqRoutingRule = Get-AzApplicationGatewayRequestRoutingRule -Name rule1 -ApplicationGateway $appgw

Actualiza la puerta de enlace de aplicaciones con la configuración de rescritura de encabezados HTTP

En este ejemplo, el conjunto de reescritura se asociaría instantáneamente con una regla de enrutamiento básica. En una regla de enrutamiento basada en ruta, la asociación no se habilitaría por defecto. El conjunto de reescritura puede habilitarse mediante: la comprobación de las rutas de acceso en las que debe aplicarse mediante el portal o proporcionando una configuración de mapa de rutas de URL que especifique RewriteRuleSet para cada opción de ruta de acceso.

Add-AzApplicationGatewayRewriteRuleSet -ApplicationGateway $appgw -Name $rewriteRuleSet.Name  -RewriteRule $rewriteRuleSet.RewriteRules
Set-AzApplicationGatewayRequestRoutingRule -ApplicationGateway $appgw -Name $reqRoutingRule.Name -RuleType $reqRoutingRule.RuleType -BackendHttpSettingsId $reqRoutingRule.BackendHttpSettings.Id -HttpListenerId $reqRoutingRule.HttpListener.Id -BackendAddressPoolId $reqRoutingRule.BackendAddressPool.Id -RewriteRuleSetId $rewriteRuleSet.Id
Set-AzApplicationGateway -ApplicationGateway $appgw

Quitar una regla de reescritura (opcional)

Si necesita quitar un conjunto de reglas de reescritura de Application Gateway, siga estos pasos:

# Retrieve the current Application Gateway configuration
$appgw = Get-AzApplicationGateway -Name "AutoscalingAppGw" -ResourceGroupName "<rg name>"

# Remove the rewrite rule set association from the routing rule first
$requestRoutingRule = Get-AzApplicationGatewayRequestRoutingRule -Name "rule1" -ApplicationGateway $appgw

# Clear the rewrite rule set reference
$requestRoutingRule.RewriteRuleSet = $null

# Remove the rewrite rule set from the Application Gateway
Remove-AzApplicationGatewayRewriteRuleSet -Name "LocationHeaderRewrite" -ApplicationGateway $appgw

# Apply the changes
Set-AzApplicationGateway -ApplicationGateway $appgw

Write-Output "Rewrite rule set removed successfully"

Pasos siguientes

Ahora que ha aprendido a configurar reglas de reescritura de encabezado HTTP, explore estos artículos relacionados: