O Gateway de Aplicações do Azure permite ter uma aplicação do Serviço de Aplicações ou outro serviço multilocatário como membro do grupo de back-end. Neste artigo, você aprenderá a configurar um aplicativo do Serviço de Aplicativo com o Application Gateway. A configuração do Application Gateway difere dependendo de como o Serviço de Aplicativo pode ser acessado:
- A primeira opção usa um domínio personalizado no Application Gateway e no Serviço de Aplicativo no back-end.
- A segunda opção é fazer com que o Application Gateway acesse o Serviço de Aplicativo usando seu domínio padrão, sufixo como ".azurewebsite.net".
Essa configuração é recomendada para cenários de nível de produção e atende à prática de não alterar o nome do host no fluxo de solicitação. Você é obrigado a ter um domínio personalizado (e certificado associado) disponível para evitar ter que confiar no padrão ". Azurewebsite" domínio.
O mesmo nome de domínio para o Gateway de Aplicativo e o Serviço de Aplicativo no pool de back-end, o fluxo de solicitação não precisa substituir o nome do host. O aplicativo Web de back-end vê o host original como foi usado pelo cliente.
Esta configuração é a mais fácil e não requer um domínio personalizado. Como tal, permite uma configuração rápida e conveniente.
Quando o App Service não tem um domínio personalizado associado a ele: o cabeçalho do host na solicitação de entrada no aplicativo web precisa ser definido como o domínio padrão, sufixado com ".azurewebsites.net", ou então a plataforma não será capaz de rotear corretamente a solicitação.
O cabeçalho do host na solicitação original recebida pelo Gateway de Aplicações é diferente do nome do host do Serviço de Aplicações de back-end.
Neste artigo, vai aprender a:
- Configurar o DNS
- Adicionar o App Service como grupo de back-end ao Application Gateway
- Definir configurações HTTP para a conexão com o Serviço de Aplicativo
- Configurar um ouvinte HTTP
- Configurar uma regra de roteamento de solicitação
Pré-requisitos
Configuração do DNS
No contexto desse cenário, o DNS é relevante em dois lugares:
- O nome DNS, que o utilizador ou cliente está a usar em relação ao Application Gateway e o que é apresentado num navegador
- O nome DNS que o Application Gateway está a usar internamente para aceder ao Serviço de Aplicações no backend
Encaminhe o usuário ou cliente para o Application Gateway usando o domínio personalizado. Configure o DNS usando um alias CNAME apontado para o DNS for Application Gateway. O endereço DNS do Application Gateway é mostrado na página de visão geral do endereço IP público associado. Como alternativa, crie um registro A apontando diretamente para o endereço IP. (Para o Application Gateway V1, o VIP pode mudar se você parar e iniciar o serviço, o que torna essa opção indesejada.)
O Serviço de Aplicativo deve ser configurado para aceitar tráfego do Application Gateway usando o nome de domínio personalizado como host de entrada. Para obter mais informações sobre como mapear um domínio personalizado para o Serviço de Aplicativo, consulte Tutorial: Mapear um nome DNS personalizado existente para o Serviço de Aplicativo do Azure. Para verificar o domínio, o Serviço de Aplicativo requer apenas a adição de um registo TXT. Nenhuma alteração é necessária nos registos CNAME ou nos registos do tipo A. A configuração de DNS para o domínio personalizado permanece direcionada para o Application Gateway.
Para aceitar conexões com o Serviço de Aplicativo por HTTPS, configure sua associação TLS. Para obter mais informações, consulte Proteger um nome DNS personalizado com uma associação TLS/SSL no Serviço de Aplicativo do Azure Configurar o Serviço de Aplicativo para extrair o certificado para o domínio personalizado do Cofre da Chave do Azure.
Quando nenhum domínio personalizado está disponível, o usuário ou cliente pode acessar o Application Gateway usando o endereço IP do gateway ou seu endereço DNS. O endereço DNS do Application Gateway pode ser encontrado na página de visão geral do endereço IP público associado. Não ter um domínio personalizado disponível implica que nenhum certificado assinado publicamente não está disponível para TLS no Application Gateway. Os clientes estão restritos a usar HTTP ou HTTPS com um certificado autoassinado, ambos indesejados.
Para se conectar ao Serviço de Aplicações, o Gateway de Aplicações usa o domínio padrão conforme fornecido pelo Serviço de Aplicações (sufixo "azurewebsites.net").
Adicionar serviço de aplicação como pool de back-end
No portal do Azure, selecione seu Gateway de Aplicativo.
Em Pools de back-end, selecione o pool de back-end.
Em Tipo de destino, selecione Serviços de Aplicativo.
Em Destino , selecione seu Serviço de Aplicativo.
Nota
A lista suspensa preenche apenas os serviços de aplicativo que estão na mesma assinatura do seu Application Gateway. Se pretender usar um serviço de aplicação que esteja numa subscrição diferente daquela em que o Gateway de Aplicação está, em vez de escolher Serviços de Aplicação na lista suspensa Destinos, escolha a opção Endereço IP ou nome do host e insira o nome do host (example.azurewebsites.net) do serviço de aplicação. Se você estiver usando pontos de extremidade privados com seu Serviço de Aplicativo, deverá usar o FQDN ou o endereço IP do ponto de extremidade privado.
Selecione Guardar.
# Fully qualified default domain name of the web app:
$webAppFQDN = "<nameofwebapp>.azurewebsite.net"
# For Application Gateway: both name, resource group and name for the backend pool to create:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add a new Backend Pool with App Service in there:
Add-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw -BackendFqdns $webAppFQDN
# Update Application Gateway with the new added Backend Pool:
Set-AzApplicationGateway -ApplicationGateway $gw
Editar configurações HTTP para o Serviço de Aplicativo
É necessária uma Configuração HTTP que instrua o Gateway de Aplicações a aceder ao back-end do Serviço de Aplicações utilizando o nome de domínio personalizado. A configuração HTTP é, por padrão, usar o teste de integridade padrão. Enquanto as sondas de integridade padrão encaminham solicitações com o hostname no qual o tráfego é recebido, as sondas de integridade podem utilizar 127.0.0.1 como hostname para o Backend Pool, uma vez que nenhum hostname foi explicitamente definido. Por esse motivo, precisamos criar uma sonda de verificação personalizada configurada com o nome de domínio personalizado correto como seu nome de host.
Nós nos conectamos ao back-end usando HTTPS.
- Em Configurações HTTP, selecione uma configuração HTTP existente ou adicione uma nova.
- Ao criar uma nova configuração HTTP, atribua-lhe um nome
- Selecione HTTPS como o protocolo de back-end desejado usando a porta 443
- Se o certificado for assinado por uma autoridade conhecida, selecione "Sim" para "Certificado de CA conhecido". Como alternativa, adicione autenticação ou certificados raiz fidedignos dos servidores back-end
- Certifique-se de definir "Substituir com novo nome de host" como "Não"
- Selecione a sonda de integridade HTTPS personalizada na lista suspensa para "Sonda personalizada".
É necessária uma Configuração HTTP que instrua o Application Gateway a acessar o back-end do Serviço de Aplicativo usando o nome de domínio padrão ("azurewebsites.net"). Para fazer isso, a configuração HTTP substituirá explicitamente o nome do host.
- Em Configurações HTTP, selecione uma configuração HTTP existente ou adicione uma nova.
- Ao criar uma nova configuração HTTP, atribua-lhe um nome
- Selecione HTTPS como o protocolo de back-end desejado usando a porta 443
- Se o certificado for assinado por uma autoridade conhecida, selecione "Sim" para "Certificado de autoridade de certificação conhecido do usuário".
Como alternativa, adicione certificados de autenticação/raiz confiáveis de servidores de back-end
- Certifique-se de definir "Substituir com novo nome de host" como "Sim"
- Em "Substituição do nome do host", selecione "Escolher nome do host do destino de backend". Essa configuração faz com que a solicitação para o Serviço de Aplicativo use o nome de host "azurewebsites.net", conforme configurado no Pool de Back-end.
# Configure Application Gateway to connect to App Service using the incoming hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$customProbeName = "<name for custom health probe>"
$customDomainName = "<FQDN for custom domain associated with App Service>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add custom health probe using custom domain name:
Add-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw -Protocol Https -HostName $customDomainName -Path "/" -Interval 30 -Timeout 120 -UnhealthyThreshold 3
$probe = Get-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -Probe $probe -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
# Configure Application Gateway to connect to backend using default App Service hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -PickHostNameFromBackendAddress -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
Para aceitar tráfego, precisamos configurar um Listener. Para saber mais sobre o Listener, veja Configuração do ouvinte do Application Gateway.
- Abra a seção "Ouvintes" e escolha "Adicionar ouvinte" ou selecione um existente para editar
- Para um novo ouvinte: dê-lhe um nome
- Em "Frontend IP", selecione o endereço IP onde deseja escutar
- Em "Porta", selecione 443
- Em "Protocolo", selecione "HTTPS"
- Em "Escolher um certificado", selecione "Escolher um certificado do Cofre da Chave". Para obter mais informações, consulte Usando o Cofre da Chave , onde você encontra mais informações sobre como atribuir uma identidade gerenciada e fornecer direitos ao Cofre da Chave.
- Dê um nome ao certificado
- Selecione a identidade gerenciada
- Selecione o Cofre de Chaves de onde deseja obter o certificado
- Selecionar o certificado
- Em "Tipo de ouvinte", selecione "Básico"
- Selecione "Adicionar" para adicionar o ouvinte
Supondo que não haja nenhum domínio personalizado disponível ou certificado associado, configure o Application Gateway para ouvir o tráfego HTTP na porta 80. Como alternativa, consulte as instruções sobre como criar um certificado autoassinado
- Abra a seção "Ouvintes" e escolha "Adicionar ouvinte" ou selecione um existente para editar
- Para um novo ouvinte: dê-lhe um nome
- Em "Frontend IP", selecione o endereço IP onde deseja escutar
- Em "Porta", selecione 80
- Em "Protocolo", selecione "HTTP"
Adicionar um ouvinte para o tráfego de HTTP
# This script assumes that:
# - a certificate was imported in Azure Key Vault already
# - a managed identity was assigned to Application Gateway with access to the certificate
# - there is no HTTP listener defined yet for HTTPS on port 443
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwSSLCertificateName = "<name for ssl cert to be created within Application Gateway"
$appGwSSLCertificateKeyVaultSecretId = "<key vault secret id for the SSL certificate to use>"
$httpListenerName = "<name for the listener to add>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Create SSL certificate object for Application Gateway:
Add-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw -KeyVaultSecretId $appGwSSLCertificateKeyVaultSecretId
$sslCert = Get-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw
# Fetch public ip associated with Application Gateway:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
$port = New-AzApplicationGatewayFrontendPort -Name "port_443" -Port 443
Add-AzApplicationGatewayFrontendPort -Name "port_443" -ApplicationGateway $gw -Port 443
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Https -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port -SslCertificate $sslCert
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
Em muitos casos, existe um ouvinte público para HTTP na porta 80. O script abaixo cria um, se esse ainda não for o caso.
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for the listener to add if not exists yet>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check if HTTP listener on port 80 already exists:
$port = $gw.FrontendPorts | Where-Object {$_.Port -eq 80}
$listener = $gw.HttpListeners | Where-Object {$_.Protocol.ToString().ToLower() -eq "http" -and $_.FrontendPort.Id -eq $port.Id}
if ($listener -eq $null){
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Http -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
}
O Pool de Back-end e as Configurações HTTP, configurados anteriormente, permitem que a regra de roteamento de solicitações seja estabelecida para direcionar o tráfego de um listener e roteá-lo para o Pool de Back-end, utilizando as Configurações HTTP. Para isso, certifique-se de ter um ouvinte HTTP ou HTTPS disponível que ainda não esteja vinculado a uma regra de roteamento existente.
- Em "Regras", selecione para adicionar uma nova "Regra de roteamento de solicitação"
- Dê um nome à regra
- Selecione um ouvinte HTTP ou HTTPS que ainda não esteja vinculado a uma regra de roteamento existente
- Em "Destinos de back-end", escolha o Pool de back-end no qual o Serviço de Aplicativo foi configurado
- Definir as configurações HTTP com as quais o Application Gateway deve se conectar ao back-end do Serviço de Aplicativo
- Selecione "Adicionar" para salvar esta configuração
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for existing http listener (without rule) to route traffic from>"
$httpSettingsName = "<name for http settings to use>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to route to>"
$reqRoutingRuleName = "<name for request routing rule to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get HTTP Settings:
$httpListener = Get-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw
$httpSettings = Get-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw
$backendPool = Get-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw
# Add routing rule:
Add-AzApplicationGatewayRequestRoutingRule -Name $reqRoutingRuleName -ApplicationGateway $gw -RuleType Basic -BackendHttpSettings $httpSettings -HttpListener $httpListener -BackendAddressPool $backendPool
# Update Application Gateway with the new routing rule:
Set-AzApplicationGateway -ApplicationGateway $gw
Testar
Antes de fazer isso, certifique-se de que o estado do sistema back-end esteja saudável.
Abra a seção "Integridade do Backend" e verifique se a coluna "Status" indica que a combinação para Configuração HTTP e Pool de Backend aparece como "Saudável".
Agora, navegue até a aplicação Web usando o Endereço IP do Gateway de Aplicação ou o nome DNS associado ao Endereço IP. Ambos podem ser encontrados na página "Visão geral" do Application Gateway como uma propriedade em "Essentials". Como alternativa, o recurso Endereço IP Público também mostra o endereço IP e o nome DNS associado.
Preste atenção à seguinte lista não exaustiva de sintomas potenciais ao testar a aplicação:
- redirecionamentos apontando para ".azurewebsite.net" diretamente em vez de para o Application Gateway
- Inclui redirecionamentos de autenticação que tentam acessar ".azurewebsite.net" diretamente
- os cookies ligados ao domínio não estão a ser transmitidos para o back-end
- incluir o uso da configuração "Afinidade ARR" no App Service
As condições acima (explicadas com mais detalhes no Architecture Center) indicariam que seu aplicativo Web não lida bem com a reescrita do nome do host. Isso é comumente visto. A maneira recomendada de lidar com isso é seguir as instruções para configurar o Application Gateway com o Serviço de Aplicativo usando um domínio personalizado. Consulte também: Solucionar problemas do Serviço de Aplicativo no Application Gateway.
Abra a seção "Integridade do Backend" e verifique se a coluna "Status" indica que a combinação para Configuração HTTP e Pool de Backend aparece como "Saudável".
Agora navegue até o aplicativo Web usando o domínio personalizado que você associou ao Gateway de Aplicativo e ao Serviço de Aplicativo no back-end.
Verifique se o estado de saúde do back-end e das configurações de HTTP indica como "Saudável".
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
Para testar a configuração, solicitamos conteúdo do Serviço de Aplicativo por meio do Application Gateway usando o domínio personalizado:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Verifique se o estado de saúde do back-end e das configurações de HTTP indica como "Saudável".
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
Para testar a configuração, solicitamos conteúdo do Serviço de Aplicativo por meio do Application Gateway usando o endereço IP:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get ip address:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
Write-Host "Public ip address for Application Gateway is $($publicIp.IpAddress)"
Invoke-WebRequest "http://$($publicIp.IpAddress)"
Preste atenção à seguinte lista não exaustiva de sintomas potenciais ao testar a aplicação:
- redirecionamentos apontando para ".azurewebsites.net" diretamente em vez de para o Application Gateway
- isso inclui redirecionamentos de Autenticação do Serviço de Aplicações que tentam acessar ".azurewebsites.net" diretamente
- os cookies ligados ao domínio não estão a ser transmitidos para o back-end
- isso inclui o uso da configuração "Afinidade ARR" no Serviço de Aplicações
As condições acima (explicadas com mais detalhes no Architecture Center) indicariam que seu aplicativo Web não lida bem com a reescrita do nome do host. Isso é comumente visto. A maneira recomendada de lidar com essa condição é seguir as instruções de configuração do Application Gateway com o Serviço de Aplicativo usando um domínio personalizado. Consulte também: Solucionar problemas do Serviço de Aplicativo no Application Gateway.
Restringir o acesso
Os aplicativos Web implantados nesses exemplos usam endereços IP públicos que podem ser acessados diretamente da Internet. Isso ajuda na solução de problemas quando você está aprendendo sobre um novo recurso e tentando coisas novas. Mas se você pretende implantar um recurso na produção, deseja adicionar mais restrições. Considere as seguintes opções: