nginx configuração do módulo de localização geográfica usando o banco de dados geográficos?

3

Eu configurei o nginx como um proxy reverso para alguns servidores back-end / upstream do Apache.

Usando o banco de dados GeoLite da MaxMind, estou tentando carregar as solicitações entre os dois servidores dependendo o código do país do cliente.

Configuração Nginx:

geo $geo {
        default default;
        include geo.conf;
    }
    upstream default.backend {
        server 192.168.0.1:8080; #Server A
        server 192.168.0.2:8080; #Server B
    }
    upstream DE.backend {
        server 192.168.0.1:8080; #Server A
    }
    upstream US.backend {
        server 192.168.0.2:8080; #Server B
    }
server {
        listen 80;
        server_name myserver.com;
        location / {
            proxy_pass http://$geo.backend;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

Por isso estou tentando enviar qualquer cliente alemão para o servidor A, e clientes dos EUA para o servidor B, e quaisquer outros clientes que não correspondam aos códigos de país da Alemanha ou dos EUA para serem balanceados entre os servidores A & B.

No entanto, como geo.conf contém códigos de país para muitos (todos) outros países, esses valores estão sendo definidos para a variável $geo , em oposição ao valor ' default '.

Com minha configuração atual, isso causa erros de '502 Bad Gateway' com todas as solicitações que não são DE ou US.

Log de erros do Nginx:

2013/10/11 08:18:50 [error] 25017#0: *1 no resolver defined to resolve NL.backend, client: 85.17.131.209, server: myserver.com, request: "GET / HTTP/1.1", host: "myserver.com"

Log de acesso ao Nginx:

85.17.131.209 - - [11/Oct/2013:08:18:50 -0700] "GET / HTTP/1.1" 502 574 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31" "-"

Como posso configurar nginx.conf para interpretar qualquer valor de código de país IP de geo.conf que não seja DE ou US como default e carregar o saldo de acordo com upstream default.backend ?

    
por Elijah Paul 11.10.2013 / 18:00

1 resposta

2

default especificado dentro de geo especifica apenas um valor padrão para os endereços IP que não estão no banco de dados. Portanto, $geo sempre terá códigos de país para o que estiver presente no banco de dados. Então, default não faz nada por você.

Para lidar com isso, use map além disso.

map $geo $backend {
    default default;
    US US;
    DE DE;
}
    
por 11.10.2013 / 18:11