Eu tenho um aplicativo que está sendo executado em duas instâncias diferentes da AWS e gostaria de ativar sessões "persistentes" ou "persistentes" com base no IP, para que eu possa tirar proveito das tecnologias de soquete da Web de uma maneira específica.
Eu tenho duas configurações diferentes que envolvem o uso ip_hash
para ativar essas sessões complicadas.
Na primeira configuração, os processos do aplicativo estão em execução na mesma instância que a configuração do Nginx. Isso está funcionando , as sessões são persistentes conforme o esperado.
upstream my_app {
ip_hash;
# local servers
server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Na segunda instalação, estou apontando para instâncias externas e tentando obter o mesmo efeito. Esta configuração não está funcionando . Em outras palavras, as sessões ainda estão sendo balanceadas.
upstream my_app {
ip_hash;
# external servers
server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Estou usando ip_hash
corretamente? Como posso ativar sessões baseadas em IP "aderentes" para servidores externos?
fonte
Respostas:
Meu servidor estava atrás do balanceamento de carga da AWS, então eu precisava passar os cabeçalhos corretos para o upstream, para que sempre refletisse o IP do cliente. A seguinte configuração corrigiu meu problema (consulte a linha comentada):
fonte
De acordo com a documentação do Nginx, o suporte à sessão pegajosa está disponível apenas para a versão Plus cara. Pesquisei alternativas e, quanto mais perto estiver, esse garfo antigo não é compatível com o Nginx 1.5+ https://github.com/lusis/nginx-sticky-module
Também tentei criar um módulo LUA, mas não há ganchos de API para seleção de pares, apenas para enumeração e bloqueio.
Balanceamento de carga Nginx Plus
Atualizar
Encontrei outro ótimo módulo, consulte https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
fonte