Solucionar problemas de afinidade de sessão do Application Gateway do Azure

Resumo

Saiba como diagnosticar e resolver problemas de afinidade de sessão com o Gateway de Aplicativo do Azure. Mantendo os usuários no mesmo servidor de back-end, você pode melhorar o desempenho do aplicativo.

Observação

Use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, consulte Migrate 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 por gateway, o Application Gateway direciona o tráfego subsequente de uma sessão de usuário para o processamento no mesmo servidor. Esse recurso é importante nos casos em que o estado da sessão é salvo localmente no servidor para uma sessão de usuário. A afinidade de sessão também é conhecida como sessões temporárias.

Observação

O Gateway de Aplicativo v1 usa um cookie chamado ARRAffinity para direcionar o tráfego para o mesmo membro do pool de back-end. No Gateway de Aplicativo v2, esse cookie é renomeado para ApplicationGatewayAffinity. Para os fins deste documento, ApplicationGatewayAffinity é usado como exemplo. O ARRAffinity pode ser substituído nas instâncias aplicáveis do Gateway de Aplicações v1.

Possíveis causas para o problema

Os problemas de manutenção da afinidade de sessão baseada em cookie podem ocorrer pelos seguintes motivos:

  • Você não habilitou a configuração afinidade baseada em cookie .
  • Seu aplicativo não pode lidar com afinidade baseada em cookie.
  • Seu aplicativo usa afinidade baseada em cookie, mas as solicitações ainda pulam entre servidores de back-end.

Problemas de afinidade de sessão podem ocorrer se você esquecer de habilitar a configuração "Afinidade baseada em cookie". Para verificar se você habilitou a configuração "Afinidade baseada em cookie" na guia Configurações de Back-end no portal do Azure, siga estas etapas:

  1. Entre no portal Azure.

  2. No painel de navegação esquerdo , selecione Todos os recursos. Selecione o nome do gateway de aplicativo na folha Todos os recursos . Se a assinatura selecionada já tiver vários recursos, insira o nome do gateway de aplicativo na caixa Filtrar por nome... para acessar facilmente o gateway de aplicativo.

  3. Selecione a guia Configurações de back-end em CONFIGURAÇÕES.

    Captura de tela do portal do Azure com Configurações e configurações de back-end selecionadas para um Gateway de Aplicativo.

  4. Selecione a configuração de back-end. Na configuração Adicionar Back-end, verifique se a afinidade baseada em Cookie está habilitada.

    Captura de tela das configurações de back-end mostrando a afinidade baseada em cookie selecionada no Gateway de Aplicativo.

Para verificar se o valor de "CookieBasedAffinity" está definido como Habilitado em "backendHttpSettingsCollection", use um dos seguintes métodos:

"cookieBasedAffinity": "Enabled", 

Motivo

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 afinidade baseada em cookie, você deverá usar um balanceador de carga Azure externo ou interno ou outra solução de terceiros.

Sintoma

Você habilita a configuração de afinidade baseada em cookie. Quando você acessa o Application Gateway usando uma URL de nome curto no Internet Explorer, como http://website, a solicitação ainda retorna entre servidores back-end.

Para identificar esse problema, siga estas instruções:

  1. Faça um rastreamento do depurador web no Client que se conecta ao aplicativo atrás do Application Gateway. Este exemplo usa Fiddler. Dica Se você não souber como usar o Fiddler, selecione a opção Quero coletar o tráfego de rede e analisá-lo usando o depurador da Web na parte inferior.

  2. Verifique e analise os logs de sessão para determinar se os cookies que o cliente fornece incluem os detalhes do ApplicationGatewayAffinity. Se você não encontrar os detalhes do ApplicationGatewayAffinity, como ApplicationGatewayAffinity=ApplicationGatewayAffinityValue dentro do conjunto de cookies, o cliente não está respondendo com o cookie ApplicationGatewayAffinity que o Gateway de Aplicações fornece. Por exemplo:

    Captura de tela de um log de sessão com uma única entrada realçada.

    Captura de tela dos cabeçalhos de solicitação HTTP com informações de cookie realçadas.

O aplicativo continua tentando definir o cookie em cada solicitação até obter uma resposta.

Motivo

Esse problema ocorre porque o Internet Explorer e outros navegadores não armazenam ou usam o cookie com uma URL de nome curto.

Resolução

Para corrigir esse problema, acesse o Gateway de Aplicativo usando um FQDN (nome de domínio totalmente qualificado). Por exemplo, use http://website.com ou http://appgw.website.com.

Logs adicionais para solucionar problemas

Você pode coletar e analisar logs adicionais para solucionar problemas relacionados à afinidade de sessão baseada em cookie.

Analisar logs do Gateway de Aplicativo do Azure

Para coletar logs do Gateway de Aplicações, siga estas instruções:

Habilite o registro de log usando o portal Azure.

  1. No portal Azure, encontre seu recurso e então selecione Configuração de Diagnósticos.

    No Gateway de Aplicativo, três logs estão disponíveis: log de Acesso, log de Desempenho e log de Firewall.

  2. Selecione Adicionar configuração de diagnóstico para começar a coletar dados.

    Captura de tela de um gateway de aplicativo com as configurações de diagnóstico selecionadas.

  3. A página Configurações de diagnóstico fornece as configurações dos logs de diagnóstico. Neste exemplo, Log Analytics armazena os logs. Você também pode usar os Hubs de Eventos do Azure e uma conta de armazenamento para salvar os logs de diagnóstico.

    Captura de tela do painel Configurações de diagnóstico com a configuração do Log Analytics selecionada.

  4. Confirme as configurações e selecione em Salvar.

Usar um depurador da Web para capturar e analisar o tráfego HTTP ou HTTPS

Ferramentas de depuração da Web, como o Fiddler, podem ajudá-lo a depurar aplicativos Web capturando o tráfego de rede entre a Internet e os computadores de teste. Essas ferramentas permitem que você inspecione os dados de entrada e saída à medida que o navegador recebe ou envia. Neste exemplo, o Fiddler tem a opção de reprodução HTTP que pode ajudá-lo a solucionar problemas do lado do cliente com aplicativos Web, especialmente problemas de autenticação.

Use o depurador da Web de sua escolha. Neste exemplo, use o Fiddler para capturar e analisar o tráfego HTTP ou HTTPS. Siga as instruções:

  1. Baixe o Fiddler.

    Observação

    Escolha Fiddler4 se o computador de captura tiver .NET 4 instalado. Caso contrário, escolha Fiddler2.

  2. Clique com o botão direito do mouse no executável de instalação e execute como administrador para instalar.

    Captura de tela do programa de instalação do Fiddler com Executar como administrador selecionado.

  3. Quando você abre o Fiddler, ele inicia automaticamente a captura de tráfego (observe a Captura no canto inferior esquerdo). Pressione F12 para iniciar ou parar a captura de tráfego.

    Captura de tela do Fiddler Web Debugger com o indicador de captura destacado.

  4. Provavelmente, você está interessado em descriptografar o tráfego HTTPS. Habilite a descriptografia HTTPS selecionando Ferramentas>Opções do Fiddler e marcando a caixa Descriptografar o tráfego HTTPS.

    Captura de tela das Opções do Fiddler com HTTPS selecionado e descriptografia do tráfego HTTPS habilitada.

  5. Para remover sessões não relacionadas anteriores antes de reproduzir o problema, selecione X>Remover Tudo.

    Captura de tela do menu X no Fiddler com Remover tudo selecionado.

  6. Ao reproduzir o problema, salve o arquivo para revisão selecionando Salvar>>Todas as Sessões.

    Captura de tela do menu Arquivo no Fiddler com Salvar Todas as Sessões selecionadas.

  7. Verifique e analise os logs de sessão para determinar qual é o problema.

    Por exemplo:

  • Exemplo A: Você encontra um log de sessão mostrando que a solicitação é enviada do cliente e direcionada para o endereço IP público do Application Gateway. Selecione este log para exibir os detalhes. No lado direito, os dados na caixa inferior são o que o Gateway de Aplicações retorna 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 Gateway de Aplicativo não aplicará o cookie de volta ao 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.

    Captura de tela dos detalhes da entrada de log com o valor de Set-Cookie realçado.

  • Exemplo B: O próximo log de sessão, que segue o anterior, é o cliente respondendo ao Gateway de Aplicações, que define o ApplicationGatewayAffinity. Se a ID de cookie ApplicationGatewayAffinity corresponder, o pacote irá para o mesmo servidor de back-end usado anteriormente. Verifique as próximas várias linhas de comunicação HTTP para ver se o cookie ApplicationGatewayAffinity do cliente está mudando.

    Captura de tela dos detalhes da entrada de log com um valor de cookie realçado.

Observação

Para a mesma sessão de comunicação, o cookie não deve ser alterado. Marque a caixa de seleção superior no lado direito, selecione a guia Cookies para verificar se o cliente está usando o cookie e enviando-o de volta para o Gateway de Aplicações. Se isso não estiver ocorrendo, o navegador do cliente não estará usando o cookie para conversas. Às vezes, o cliente pode mentir.