Solucionar problemas de afinidade de sessão do Gateway de Aplicativo do Azure
Saiba como diagnosticar e resolver problemas de afinidade de sessão com o Azure Application Gateway.
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Descrição geral
O recurso de afinidade de sessão baseado em cookie é útil para manter uma sessão de usuário no mesmo servidor. Ao utilizar cookies geridos por um gateway, o Gateway de Aplicação pode direcionar o tráfego subsequente de uma sessão de utilizador para o mesmo servidor para processamento. Isto é importante nos casos em que o estado da sessão é guardado localmente no servidor para uma sessão de utilizador. A afinidade de sessão também é conhecida como sessões adesivas.
Nota
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 Application Gateway v2, esse cookie foi renomeado para ApplicationGatewayAffinity. Para os fins deste documento, ApplicationGatewayAffinity será usado como exemplo, ARRAffinity pode ser substituído em quando aplicável para instâncias do Application Gateway v1.
Possíveis causas do problema
O problema em manter a afinidade de sessão baseada em cookies pode acontecer devido aos seguintes motivos principais:
- A configuração "Afinidade baseada em cookies" não está ativada
- Seu aplicativo não pode lidar com afinidade baseada em cookies
- O aplicativo está usando afinidade baseada em cookies, mas as solicitações ainda saltam entre servidores back-end
Verifique se a configuração "Afinidade baseada em cookies" está ativada
Às vezes, os problemas de afinidade de sessão podem ocorrer quando você se esquece de ativar a configuração "Afinidade baseada em cookies". Para determinar se você habilitou a configuração "Afinidade baseada em cookies" na guia Configurações HTTP no portal do Azure, siga as instruções:
Inicie sessão 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 selecionada já tiver vários recursos, você poderá inserir o nome do gateway de aplicativo na caixa Filtrar por nome... para acessar facilmente o gateway de aplicativo.
Selecione a guia Configurações HTTP em CONFIGURAÇÕES.
Selecione a configuração HTTP e, na página Adicionar configuração HTTP, verifique se a afinidade baseada em cookies está ativada.
Você também pode verificar o valor de "CookieBasedAffinity" está definido como Enabledem "backendHttpSettingsCollection" usando um dos seguintes métodos:
- Execute Get-AzApplicationGatewayBackendHttpSetting no PowerShell
- Examine o arquivo JSON usando o modelo do Azure Resource Manager
"cookieBasedAffinity": "Enabled",
O aplicativo não pode lidar com afinidade baseada em cookies
Motivo
O gateway de aplicativo só pode executar afinidade baseada em sessão usando um cookie.
Solução
Se o aplicativo não puder lidar com afinidade baseada em cookie, você deverá usar um balanceador de carga azure externo ou interno ou outra solução de terceiros.
O aplicativo está usando afinidade baseada em cookies, mas as solicitações ainda saltam entre servidores back-end
Sintoma
Você habilitou a configuração de afinidade baseada em cookie, quando você acessa o Application Gateway usando uma URL de nome curto no Internet Explorer, por exemplo: http://website
, a solicitação ainda está saltando entre servidores back-end.
Para identificar esse problema, siga as instruções:
Pegue um rastreamento do depurador da Web no "Cliente" que está se conectando ao aplicativo por trás do Application Gateway(Estamos usando o Fiddler neste exemplo). Dica Se você não sabe como usar o Fiddler, marque a opção "Quero coletar 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. Se você não encontrar os detalhes de ApplicationGatewayAffinity, como "ApplicationGatewayAffinity= ApplicationGatewayAffinityValue" dentro do conjunto de cookies, isso significa que o cliente não está respondendo com o cookie ApplicationGatewayAffinity, que é fornecido pelo Application Gateway. Por exemplo:
A aplicação continua a tentar definir o cookie em cada pedido até obter resposta.
Motivo
Esse problema ocorre porque o Internet Explorer e outros navegadores podem não armazenar ou usar o cookie com uma URL de nome curto.
Resolução
Para corrigir este problema, aceda ao Gateway de Aplicação através de 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 os problemas relacionados à afinidade de sessão baseada em cookies
Analisar logs do Application Gateway
Para coletar os logs do Application Gateway, siga as instruções:
Habilite o registro em log usando o portal do Azure.
No portal do Azure, localize seu recurso e selecione Configuração de diagnóstico.
Para o Application Gateway, 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ção de diagnóstico fornece as configurações para os logs de diagnóstico. Neste exemplo, o Log Analytics armazena os logs. Também pode utilizar os hubs de eventos e uma conta de armazenamento para guardar os registos de diagnóstico.
Confirme as configurações e selecione Salvar.
Use o depurador da Web para capturar e analisar os tráfegos HTTP ou HTTPS
Ferramentas de depuração da Web, como o Fiddler, podem ajudá-lo a depurar aplicativos da Web capturando o tráfego de rede entre a Internet e os computadores de teste. Estas ferramentas permitem-lhe inspecionar os dados recebidos e enviados à medida que o navegador os recebe/envia. O Fiddler, neste exemplo, tem a opção de repetição HTTP que pode ajudá-lo a solucionar problemas do lado do cliente com aplicativos Web, especialmente para o tipo de problema de autenticação.
Use o depurador da Web de sua escolha. Neste exemplo, usaremos o Fiddler para capturar e analisar tráfegos http ou https, siga as instruções:
Baixar Fiddler.
Nota
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 executável de instalação e execute como administrador para instalar.
Quando você abre o Fiddler, ele deve começar automaticamente a capturar tráfego (observe a Captura no canto inferior esquerdo). Pressione F12 para iniciar ou parar a captura de tráfego.
Muito provavelmente, você estará interessado em tráfego HTTPS descriptografado, e você pode ativar a descriptografia HTTPS selecionando Ferramentas>Fiddler Options, e marque 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 como 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ê encontra um log de sessão que a solicitação é enviada do cliente e ele vai para o endereço IP público do Application Gateway, clique neste log para exibir os detalhes. No lado direito, os dados na caixa inferior são o que o Application Gateway está retornando ao cliente. Selecione a guia "RAW" e determine se o cliente está recebendo um "Set-Cookie: ApplicationGatewayAffinity= ApplicationGatewayAffinityValue". Se não houver cookie, a afinidade de sessão não será definida ou o Application Gateway não aplicará o cookie de volta ao cliente.
Nota
Esse valor ApplicationGatewayAffinity é o cookie-id, que o Application Gateway define para que o cliente seja enviado a um determinado servidor back-end.
Exemplo B: O próximo log de sessão seguido pelo anterior é o cliente respondendo de volta ao Application Gateway, que definiu o ApplicationGatewayAffinity. Se o cookie-id ApplicationGatewayAffinity corresponder, o pacote deverá ser enviado para o mesmo servidor back-end usado anteriormente. Verifique as próximas linhas de comunicação http para ver se o cookie ApplicationGatewayAffinity do cliente está mudando.
Nota
Para a mesma sessão de comunicação, o cookie não deve ser alterado. Marque a caixa superior no lado direito, selecione a guia "Cookies" para ver se o cliente está usando o cookie e enviando-o de volta para o Application Gateway. Caso contrário, o navegador do cliente não está mantendo e usando o cookie para conversas. Às vezes, o cliente pode mentir.
Próximos passos
Se as etapas anteriores não resolverem o problema, abra um tíquete de suporte.