Compartilhar via


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

À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:

  1. Faça logon no portal do Azure.

  2. 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.

  3. Selecione a guia configurações de HTTP em CONFIGURAÇÕES.

    Captura de tela mostrando as CONFIGURAÇÕES com as definições de HTTP selecionadas.

  4. Selecione a configuração HTTP e na página Adicionar configuração HTTP, verifique se a Afinidade baseada em cookie está habilitada.

    A captura de tela mostra as configurações de gateway para um gateway de aplicativo, incluindo se a afinidade baseada em cookie está selecionada.

Você também pode verificar se o valor de "CookieBasedAffinity" está definido como Habilitadoem "backendHttpSettingsCollection" usando um dos seguintes métodos:

"cookieBasedAffinity": "Enabled", 

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.

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:

  1. 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.

  2. 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:

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

    Captura de tela mostrando os cabeçalhos de solicitação para HTTP, incluindo informações de cookie.

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.

  1. 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.

  2. Para começar a coletar dados, selecione Adicionar configuração de diagnóstico.

    A captura de tela mostra 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, 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.

    A captura de tela mostra o painel de configurações de diagnóstico com a Configuração da Análise de Logs selecionada.

  4. 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:

  1. Baixe o Fiddler.

    Observação

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

  2. Clique com o botão direito do mouse no arquivo de instalação e execute-o como administrador para instalá-lo.

    A captura de tela mostra o programa de instalação da ferramenta Fiddler com um menu contextual com Executar como administrador selecionado.

  3. 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.

    Captura de tela mostrando o Depurador da Web do Fiddler com o indicador de Captura realçado.

  4. 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".

    Captura de tela mostrando as opções no Fiddler com H T T P e Descriptografar tráfego HTTPS selecionados.

  5. 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:

    Captura de tela mostrando o ícone X selecionado exibindo a opção Remover Tudo.

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

    Captura de tela mostrando as opções Arquivo 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ê 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.

    Captura de tela mostrando um exemplo de detalhes de uma entrada de log com o valor Set-Cookie realçado.

  • 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.

    Captura de tela mostrando um exemplo de detalhes de uma entrada de log com um cookie realçado.

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.