Balanceamento de carga Nginx GeoIP com failover

1

Estou tentando configurar um ambiente balanceado de carga Nginx de teste. Até agora, configurei com êxito um balanceador de carga nginx-balancer1 e três servidores para atender às páginas da Web nginx1, nginx2 & nginx3 .

Eu quero equilibrar a carga por região, dependendo do IP do visitante. Eu configurei meu Nginx nginx-balancer1 para usar os dados do país da Maxmind GeoIP.

Então, aqui está minha configuração para os servidores upstream:

# Check where the user is coming from
server {
  location / {
    if ($geoip_city_continent_code = "EU") { proxy_pass http://ams1; }
    if ($geoip_city_continent_code = "NA") { proxy_pass http://sfo1; }
    if ($geoip_city_continent_code = "AS") { proxy_pass http://sgp1; }
}
}
# Define upstream servers
upstream ams1 { server server1.example.com; }
upstream sfo1 { server server1.example.com; }
upstream sgp1 { server server1.example.com; }

Isso parece funcionar bem, no entanto, se eu desligar o nginx em ams1 (server1.example.com) e tentar ir para a página principal, recebo um erro 502 Bad Gateway .

O que eu quero descobrir é se um servidor está inoperante, como posso obter nginx-balancer1 para redirecionar para outro servidor, o próximo servidor mais próximo ou o próximo funcionando.

Alguém pode ajudar?

Obrigado

    
por Daniel Pilch 26.02.2014 / 17:19

1 resposta

1

Parece que o que você está procurando é proxy_next_upstream e proxy_connect_timeout . Então você faria algo como:

proxy_next_upstream     error timeout invalid_header http_500;
proxy_connect_timeout   2;

Basicamente, se uma falha for detectada, o back-end será marcado como inativo por x segundos e tentará novamente. O Nginx tentará a próxima entrada no bloco upstream, assim que o upstream downed retornar, ele deverá ser reativado automaticamente no pool upstream.

    
por 26.02.2014 / 17:55