Solucionar problemas de afinidade da sessão do Gateway de Aplicativo do Azure
Saiba como diagnosticar e resolver problemas de afinidade de sessão com o Gateway de Aplicativo do Azure.
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Visão geral
O recurso de afinidade de sessão baseada em cookies é útil para manter uma sessão de usuário no mesmo servidor. Usando cookies gerenciados pelo gateway, o Gateway de Aplicativo pode direcionar o tráfego seguinte de uma sessão de usuário para o mesmo servidor para processamento. Isso é importante em casos em que o estado de sessão é salvo localmente no servidor para uma sessão de usuário. A afinidade de sessão também é conhecida como sessões permanentes.
Observação
O Application Gateway v1 emite um cookie chamado ARRAffinity, que é usado para direcionar o tráfego para o mesmo membro do pool de back-end. No gateway de aplicativo v2, esse cookie foi renomeado para ApplicationGatewayAffinity. Para os fins deste documento, ApplicationGatewayAffinity será usado como um exemplo, ARRAffinity pode ser substituído em onde aplicável para instâncias do gateway de aplicativo v1.
Possíveis causas para o problema
O problema na manutenção da afinidade de sessão baseada em cookies pode ocorrer devido a estes principais motivos:
- A configuração de "afinidade baseada em cookie" não está habilitada
- Seu aplicativo não pode manipular a afinidade baseada em cookie
- O aplicativo está usando a afinidade baseada em cookie, mas as solicitações ainda estão oscilando entre os servidores back-end
Verifique se a configuração de "afinidade baseada em cookies" está habilitada
Às vezes, podem ocorrer problemas de afinidade de sessão quando a configuração de "afinidade com base em cookie" não está habilitada. Para determinar se você habilitou a configuração de "afinidade baseada em cookie", na guia Configurações de HTTP, no portal do Azure, siga estas instruções:
Faça logon no portal do Azure.
No painel de navegação esquerdo, clique em Todos os recursos. Clique no nome do gateway de aplicativo na folha Todos os recursos. Se a assinatura que você selecionou já contiver vários recursos, insira o nome do gateway de aplicativo na caixa Filtrar por nome para acessar com facilidade o gateway de aplicativo.
Selecione a guia configurações de HTTP em CONFIGURAÇÕES.
Selecione a configuração HTTP e na página Adicionar configuração HTTP, verifique se a Afinidade baseada em cookie está habilitada.
Você também pode verificar se o valor de "CookieBasedAffinity" está definido como Habilitadoem "backendHttpSettingsCollection" usando um dos seguintes métodos:
- Executar Get-AzApplicationGatewayBackendHttpSetting no PowerShell
- Examinar o arquivo JSON usando o modelo de Azure Resource Manager
"cookieBasedAffinity": "Enabled",
O aplicativo não pode tratar a afinidade baseada em cookie
Causa
O gateway de aplicativo só pode executar a afinidade baseada em sessão usando um cookie.
Solução alternativa
Se o aplicativo não puder lidar com a afinidade baseada em cookie, você deverá usar um balanceador de carga do Azure externo ou interno ou outra solução de terceiros.
O aplicativo está usando a afinidade baseada em cookie, mas as solicitações ainda estão oscilando entre os servidores back-end
Sintoma
Você habilitou a configuração Afinidade baseada em Cookie ao acessar o Gateway de Aplicativo usando uma URL de nome curto no Internet Explorer, por exemplo, http://website
, e a solicitação ainda está oscilando entre servidores back-end.
Para identificar esse problema, siga as instruções:
Faça um rastreamento do depurador da web no "Cliente" que está se conectando ao aplicativo atrás do Gateway de Aplicativo (estamos usando o Fiddler neste exemplo). Dica Se não souber usar o Fiddler, marque a opção "Quero coletar o tráfego de rede e analisá-lo usando o depurador da Web" na parte inferior.
Verifique e analise os logs de sessão para determinar se os cookies fornecidos pelo cliente têm os detalhes de ApplicationGatewayAffinity. Caso não encontre os detalhes de ARRAffinity, como "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" dentro do conjunto de cookies, significa que o cliente não está respondendo com o cookie ApplicationGatewayAffinity, que é fornecido pelo Gateway de Aplicativo. Por exemplo:
O aplicativo continua tentando definir o cookie em cada solicitação até receber a resposta.
Causa
Esse problema ocorre porque o Internet Explorer e outros navegadores podem não armazenar nem usar o cookie com uma URL de nome curto.
Resolução
Para corrigir esse problema, acesse o Gateway de Aplicativo usando um FQDN. Por exemplo, use http://website.com ou http://appgw.website.com.
Logs adicionais para solucionar problemas
Você pode coletar logs adicionais e analisá-los para solucionar problemas relacionados à afinidade de sessão baseada em cookies
Analisar logs do Gateway de Aplicativo do Azure
Para coletar os logs do Gateway de Aplicativo, siga estas instruções:
Habilitar o registro em log usando o portal do Azure.
No portal do Azure, encontre o recurso e selecione a Configurações de diagnóstico.
No Gateway de Aplicativo, três logs estão disponíveis: log de Acesso, log de Desempenho e log de Firewall.
Para começar a coletar dados, selecione Adicionar configuração de diagnóstico.
A página Configurações de diagnóstico fornece as configurações dos logs de diagnóstico. Neste exemplo, o Log Analytics armazena os logs. Você também pode usar os hubs de eventos e uma conta de armazenamento para salvar os logs de diagnóstico.
Confirme as configurações e selecione em Salvar.
Usar o depurador da Web para capturar e analisar os tráfegos HTTP ou HTTPS
Ferramentas de depuração da Web, como o Fiddler, podem ajudar você a depurar aplicativos da Web, capturando o tráfego de rede entre a Internet e os computadores de teste. Essas ferramentas permitem inspecionar dados de entrada e saída à medida que o navegador os recebe/envia. O Fiddler, neste exemplo, tem a opção HTTP replay (ou reprodução de HTTP) que pode ajudar você a solucionar problemas do lado do cliente com aplicativos Web, especialmente para problemas relacionados a autenticação.
Use o depurador da Web de sua escolha. Neste exemplo, usaremos o Fiddler para capturar e analisar o tráfego http ou https. Para isso, siga estas instruções:
Baixe o Fiddler.
Observação
Escolha Fiddler4 se o computador de captura tiver o .NET 4 instalado. Caso contrário, escolha Fiddler2.
Clique com o botão direito do mouse no arquivo de instalação e execute-o como administrador para instalá-lo.
Quando você abrir o Fiddler, ele deverá iniciar automaticamente a captura de tráfego (Observe a captura no canto inferior esquerdo). Pressione F12 para iniciar ou parar a captura de tráfego.
Você provavelmente terá mais interesse no tráfego HTTPS descriptografado e pode ativar a descriptografia HTTPS selecionando Ferramentas>Opções do Fiddler e marcando a caixa "Descriptografar tráfego HTTPS".
Você pode remover sessões anteriores não relacionadas antes de reproduzir o problema clicando em X (ícone) >Remover Tudo conforme indica a seguinte captura de tela:
Depois de reproduzir o problema, salve o arquivo para revisão selecionando Arquivo>Salvar>Todas as Sessões..
Verifique e analise os logs de sessão para determinar qual é o problema.
Por exemplo:
Exemplo A: você encontrou um log de sessão cuja solicitação foi enviada do cliente para o endereço IP público do Gateway de Aplicativo, clique nesse log para exibir os detalhes. No lado direito, os dados na caixa inferior mostram o que o Gateway de Aplicativo está retornando ao cliente. Selecione a guia "RAW" e determine se o cliente está recebendo um "Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue". Se não houver nenhum cookie, a afinidade de sessão não estará definida ou o Gateway de Aplicativo não estará aplicando o cookie de volta para o cliente.
Observação
O valor de ApplicationGatewayAffinity é a cookie-id que o Gateway de Aplicativo define para que o cliente seja enviado a um servidor back-end específico.
Exemplo B: o próximo log de sessão seguido pelo anterior é o cliente que responde de volta ao Gateway de Aplicativo, que definiu o ARRAAFFINITY. Se a cookie-id de ApplicationGatewayAffinity for correspondente, o pacote deverá ser enviado ao mesmo servidor back-end usado anteriormente. Verifique as várias linhas seguintes da comunicação http para ver se o cookie ApplicationGatewayAffinity do cliente está sendo alterado.
Observação
O cookie não deve ser alterado na mesma sessão de comunicação. Marque a caixa superior no lado direito e selecione a guia "Cookies" para verificar se o cliente está usando o cookie e enviando-o de volta para o Gateway de Aplicativo. Se isso não estiver ocorrendo, o navegador do cliente não estará usando o cookie para conversas. Às vezes, o cliente pode mentir.
Próximas etapas
Se as etapas anteriores não resolverem o problema, abra um tíquete de suporte.