GeoIP2#

O módulo GeoIP2 implementa consulta em bancos de dados MaxMind GeoIP2 pelo endereço IP do cliente (por padrão) ou pelo valor de uma variável específica. Ele suporta tanto IPv4 quanto IPv6.

Instalação#

Para instalar o módulo, use um dos seguintes pacotes:

  • Angie: angie-module-geoip2

  • Angie PRO: angie-pro-module-geoip2

Carregando o Módulo#

Para trabalhar com o módulo, é necessário carregá-lo no contexto de main{}:

load_module modules/ngx_http_geoip2_module.so;    # para uso no bloco http{}
load_module modules/ngx_stream_geoip2_module.so;  # para uso no contexto stream{}

No exemplo de configuração abaixo, além das diretivas do próprio módulo, as diretivas do módulo echo também são usadas:

load_module modules/ngx_http_echo_module.so;

Exemplo de Configuração#

http {
    geoip2 /var/lib/GeoIP/GeoLite2-Country.mmdb {
        auto_reload 1h;
        $geoip2_country_code default=RU source=$http_x_forwarded_for country iso_code;
        $geoip2_country_name source=$http_x_forwarded_for country names ru;
    }

    log_format with_geoip '$server_port $remote_addr - $remote_user [$time_local] "$request" '
                           '$status $body_bytes_sent "$http_referer" '
                           '"$http_user_agent" "$http_x_forwarded_for" "$http_host" '
                           'country="$geoip2_country_code"';

    map $geoip2_country_code $denied {
        PL "1";
        QA "1";
    }

    server {
        listen 80;
        root /usr/share/angie/html;
        index index.html index.htm;
        access_log /var/log/angie/geoip_access.log with_geoip;

        if ($denied) {
            return 403;
        }

        location / {
            echo "ip = $http_x_forwarded_for";
            echo "code = $geoip2_country_code";
            echo "name = $geoip2_country_name";
        }
    }
}

Exemplos de Execução de Requisições#

$ curl -H'X-Forwarded-For: 51.68.138.153' http://127.0.0.1

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>Angie/1.10.2</center>
</body>
</html>
$ curl -H'X-Forwarded-For: 8.8.8.8' http://127.0.0.1

ip = 8.8.8.8
code = US
name = United States
$ curl -H'X-Forwarded-For: 77.88.44.242' http://127.0.0.1

ip = 77.88.44.242
code = RU
name = Russia

Informações Adicionais#

Documentação detalhada e código-fonte estão disponíveis em: leev/ngx_http_geoip2_module