Acesso de aplicativo via balanceador de carga do AWS com escalonamento automático

3

Estou configurando uma arquitetura de teste da AWS para um aplicativo da web que planejo migrar de um serviço de hospedagem dedicado para a AWS. O que eu tenho agora é o seguinte:

  • Um RDS do MySql, onde estão os dados da minha aplicação.
  • Duas instâncias do EC2. Essas instâncias têm o código-fonte do aplicativo (escrito em PHP) e já estão configuradas para se conectarem ao RDS.
  • Um balanceador de carga. Configurei-o em escala automática entre 2 e 10 instâncias, de acordo com o uso do processador, mas provavelmente ajustei as políticas depois que o aplicativo foi ativado.

As novas instâncias do EC2 já serão lançadas com o código e os parâmetros de conexão do RDS prontos por meio de uma imagem personalizada, e eu estou trabalhando na região de São Paulo.

Tudo funciona bem, exceto por uma coisa. Se eu acessar o site por meio do registro DNS do ELB, vejo o site lá, mas não consigo fazer logon. Nada acontece quando coloco as credenciais do usuário. (O site é basicamente um painel de administração, portanto, preciso fazer login para ver o conteúdo deles), mas se eu acessar por meio de um registro de IP ou DNS de instância individual, posso fazer login e usar o aplicativo normalmente. Os dados do usuário (usuário e senha) são armazenados no RDS.

Se alguém experimentou algo parecido, agradeço sua ajuda. Obrigado antecipadamente!

    
por Andres 08.07.2014 / 07:08

2 respostas

1

A maneira usual de manter uma sessão é:

  1. Autentique o usuário.
  2. Envie um cookie para o navegador com um ID exclusivo para essa sessão.
  3. Procure o cookie de sessão nos hits subsequentes desse navegador.

O cookie de sessão normalmente seria armazenado e recuperado de um local independente dos servidores da web, por exemplo, um servidor de banco de dados separado. Dessa forma, não importa qual servidor web eles acessam, eles receberão o mesmo cookie e a mesma sessão.

O cookie de sessão precisa ser seguro e exclusivo para o cliente, portanto, alguns aplicativos criarão um hash que inclui o IP do cliente no cálculo. Se este for o caso, um IP diferente se parece com uma sessão diferente.

Você precisará verificar seu aplicativo para ver se esse é o caso.

Como alternativa, se você realmente precisar vincular a sessão a um servidor específico (por exemplo, o estado das lojas de aplicativos localmente no servidor da Web), você poderá usar ELB Sticky Sessions para associar uma sessão a um determinado servidor da web. Isso só deve ser necessário se o aplicativo realmente armazenar o estado localmente em cada servidor da web.

    
por 13.07.2014 / 03:41
1

Quando você tenta acessar via ELB, você recebe algum log de acesso ou qualquer tipo de registro em sua aplicação? Caso contrário, é mais provável que ocorra um problema de transição de IP entre as instâncias do ELB e do EC2. Poderia ser específico da aplicação, como; você precisa de um endereço IP real do cliente (como o cabeçalho X-Forwarded-For)? Talvez seja por causa da lógica de autenticação que você usa no seu aplicativo.

    
por 08.07.2014 / 10:04