Configurar o Serviço de Aplicativo com o Gateway de Aplicativo
Artigo
O Gateway de Aplicativo permite que você tenha um aplicativo do Serviço de Aplicativo ou outro serviço multilocatário como um membro do pool de back-end. Neste artigo, você aprenderá como configurar um aplicativo do Serviço de Aplicativo com Gateway de Aplicativo. A configuração do Gateway de Aplicativo será diferente dependendo de como o Serviço de Aplicativo será acessado:
A primeira opção usa um domínio personalizado no Gateway de Aplicativo e no Serviço de Aplicativo no back-end.
A segunda opção é que o Gateway de Aplicativo acesse o Serviço de Aplicativo usando seu domínio padrão, com sufixo ".azurewebsites.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ê precisa ter um domínio personalizado (e um certificado associado) disponível para evitar precisar depender do domínio padrão ".azurewebsites".
Ao associar o mesmo nome de domínio ao Gateway de Aplicativo e ao 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 verá o host original como foi usado pelo cliente.
Essa configuração é a mais fácil e não requer um domínio personalizado. Assim, é possível fazer uma configuração rápida e conveniente.
Quando Serviço de Aplicativo não tiver um domínio personalizado associado a ele, o cabeçalho de host na solicitação de entrada no aplicativo Web precisará ser definido como o domínio padrão, sufixo com ".azurewebsites.net" ou a plataforma não poderá rotear a solicitação corretamente.
O cabeçalho de host na solicitação original recebida pelo Gateway de Aplicativo será diferente do nome do host do Serviço de Aplicativo de back-end.
Neste artigo, você aprenderá a:
Configurar DNS
Adicione o Serviço de Aplicativo como pool de back-end do Gateway de Aplicativo
Defina as configurações HTTP para a conexão com o Serviço de Aplicativo
Um nome de domínio personalizado e um certificado associado (assinado por uma autoridade conhecida) armazenados no Key Vault. Para obter mais informações sobre como armazenar certificados no Key Vault, consulte Tutorial: importar um certificado no Azure Key Vault
Roteie o usuário ou o cliente para o Gateway de Aplicativo usando o domínio personalizado. Configure o DNS usando um alias CNAME apontado para o DNS para o Gateway de Aplicativo. O DNS do Gateway de Aplicativo é 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 Gateway de Aplicativo V1, o VIP poderá mudar se você parar e iniciar o serviço, o que torna essa opção indesejável.)
O Serviço de Aplicativo deve ser configurado para que aceite o tráfego do Gateway de Aplicativo usando o nome de domínio personalizado como o 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 registro TXT. Nenhuma alteração é necessária em CNAME ou registros A. A configuração de DNS para o domínio personalizado permanecerá direcionada para o Gateway de Aplicativo.
Quando nenhum domínio personalizado está disponível, o usuário ou o cliente pode acessar o Gateway de Aplicativo usando o endereço IP do gateway ou seu endereço DNS. O DNS do Gateway de Aplicativo 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 estará disponível para TLS no Gateway de Aplicativo. Os clientes ficam restritos a usar HTTP ou HTTPS com um certificado autoassinado, ambos não são indesejáveis.
Para se conectar ao Serviço de Aplicativo, o Gateway de Aplicativo usa o domínio padrão, conforme fornecido pelo Serviço de Aplicativo (com sufixo "azurewebsites.net").
Adicionar serviço de Aplicativo como pool de back-end
No portal do Azure, selecione o gateway de aplicativo.
Em Pools de back-end, selecione o pool de back-end.
Em Tipo de destino, selecione Serviços de Aplicativos.
Em Destino, selecione o Serviço de Aplicativo.
Observação
A lista suspensa popula apenas os serviços de aplicativo que estão na mesma assinatura que o Gateway de Aplicativo. Se você quiser usar um serviço de aplicativo que está em uma assinatura diferente daquela em que o Gateway de Aplicativo está, em vez de escolher Serviços de Aplicativos na lista suspensa de 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 aplicativo.
Selecione Salvar.
# 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 de HTTP para o Serviço de Aplicativo
É necessária uma configuração HTTP que instrui o Gateway de Aplicativo a acessar o back-end do Serviço de Aplicativo usando o nome de domínio personalizado. Por padrão, a Configuração HTTP usará a investigação de integridade padrão. Enquanto as investigações de integridade padrão encaminham solicitações com o nome do host no qual o tráfego é recebido, as investigações de integridade utilizarão 127.0.0.1 como o nome do host para o Pool de Back-end, pois nenhum nome de host foi definido explicitamente. Por esse motivo, é preciso criar uma investigação de integridade personalizada configurada com o nome de domínio personalizado correto como seu nome de host.
Nós nos conectaremos 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, dê a ela um nome
Selecione HTTPS como o protocolo de back-end desejado usando a porta 443
Certifique-se de definir "Substituir por novo nome de host" como "Não"
Selecione a investigação de integridade HTTPS personalizada no menu suspenso para "Investigação personalizada".
É necessária uma Configuração HTTP que instrui o Gateway de Aplicativo a acessar o back-end do Serviço de Aplicativo usando o nome de domínio ("azurewebsites.net") padrão. 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, dê a ela um nome
Selecione HTTPS como o protocolo de back-end desejado usando a porta 443
Certifique-se de definir "Substituir por novo nome de host" como "Sim"
Em "Substituição do nome do host", selecione "Escolher nome do host do destino de back-end". Essa configuração fará com que a solicitação do Serviço de Aplicativo use o nome do 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
Abra a seção "Ouvintes" e escolha "Adicionar ouvinte" ou clique em um existente para editar
Para um novo ouvinte: dê a ele um nome
Em "IP de front-end", selecione o endereço IP a ser escutado
Em "Porta", selecione 443
Em "Protocolo", selecione "HTTPS"
Em "Escolher um certificado", selecione "Escolher um certificado de Key Vault". Para obter mais informações, consulte Usando o Key Vault, onde você encontra mais informações sobre como atribuir uma identidade gerenciada e fornecê-la com direitos ao seu Key Vault.
Dê um nome ao certificado
Selecionar a identidade gerenciada
Selecione o Key Vault de onde obter o certificado
Selecionar o certificado
Em "Tipo de ouvinte", selecione "Básico"
Clique em "Adicionar" para adicionar o ouvinte
Supondo que não haja nenhum domínio personalizado disponível ou certificado associado, configuraremos o Gateway de Aplicativo para escutar o tráfego HTTP na porta 80. Como alternativa, confira as instruções de como Criar um certificado autoassinado
Abra a seção "Ouvintes" e escolha "Adicionar ouvinte" ou clique em um existente para editar
Para um novo ouvinte: dê a ele um nome
Em "IP de front-end", selecione o endereço IP a ser escutado
Em "Porta", selecione 80
Em "Protocolo", selecione "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, um ouvinte público para HTTP na porta 80 já existirá. O script abaixo criará 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
}
Configurar uma regra de roteamento de solicitação
Usando o pool de back-end configurado anteriormente e as configurações HTTP, a regra de roteamento de solicitação pode ser configurada para pegar o tráfego de um ouvinte e encaminhá-lo para o pool de back-end usando as configurações HTTP. Para isso, certifique-se de que você tenha um ouvinte HTTP ou HTTPS disponível que ainda não está vinculado a uma regra de roteamento existente.
Abra a seção "Integridade do back-end" e verifique se a coluna "Status" indica a combinação de Configuração HTTP e Pool de back-end como "Íntegra".
Agora, navegue até o aplicativo Web usando o endereço IP do Gateway de Aplicativo ou o nome DNS associado para o endereço IP. Ambos podem ser encontrados na página "Visão geral" do Gateway de Aplicativo 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 completa de possíveis sintomas ao testar o aplicativo:
redirecionamentos apontando para ".azurewebsites.net" diretamente em vez de para o Gateway de Aplicativo
isso inclui redirecionamentos de autenticação que tentam acessar ".azurewebsites.net" diretamente
cookies com limite de domínio que não estão sendo passados para o back-end
As condições acima (explicadas mais detalhadamente no Centro de arquitetura) indicarão que o 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 de configuração do Gateway de Aplicativo com o Serviço de Aplicativo usando um domínio personalizado. Consulte também: Solucionar problemas do serviço de aplicativo no Gateway de Aplicativo.
Abra a seção "Integridade do back-end" e verifique se a coluna "Status" indica a combinação de Configuração HTTP e Pool de back-end como "Íntegra".
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 a integridade de back-end referente ao back-end e às Configurações HTTP aparece como "Íntegra":
$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, solicitaremos conteúdo do Serviço de Aplicativo por meio do Gateway de Aplicativo usando o domínio personalizado:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Verifique se a integridade de back-end referente ao back-end e às Configurações HTTP aparece como "Íntegra":
$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, solicitaremos conteúdo do Serviço de Aplicativo por meio do Gateway de Aplicativo 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 completa de possíveis sintomas ao testar o aplicativo:
redirecionamentos apontando para ".azurewebsites.net" diretamente em vez de para o Gateway de Aplicativo
As condições acima (explicadas mais detalhadamente no Centro de arquitetura) indicarão que o 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 de configuração do Gateway de Aplicativo com o Serviço de Aplicativo usando um domínio personalizado. Consulte também: Solucionar problemas do serviço de aplicativo no Gateway de Aplicativo.
Restringir acesso
Os aplicativos Web implantados nesses exemplos usam endereços IP públicos que podem ser acessados diretamente da internet. Isso ajuda com solução de problemas quando você estiver aprendendo sobre um novo recurso e tentar novas coisas. Mas se você pretende implantar um recurso na produção, você desejará adicionar mais restrições. Considere as seguintes opções:
Use Restrições de IP estático do Serviço de Aplicativo do Azure. Por exemplo, você pode restringir o aplicativo web para que ele só recebe tráfego de gateway de aplicativo. Use o recurso de restrição de IP de serviço de aplicativo para listar o VIP do gateway de aplicativo como o único endereço com o acesso.