Pular para conteúdo

geoip2: Módulo GeoIP2 do NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-geoip2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-geoip2

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_geoip2_module.so;
load_module modules/ngx_stream_geoip2_module.so;

Este documento descreve o nginx-module-geoip2 v3.4 lançado em 22 de junho de 2022.


ngx_http_geoip2_module - cria variáveis com valores dos bancos de dados maxmind geoip2 com base no IP do cliente (padrão) ou de uma variável específica (suporta tanto IPv4 quanto IPv6)

O módulo agora suporta streams do nginx e pode ser usado da mesma forma que o módulo http.

Download do Banco de Dados Maxmind GeoLite2 (opcional)

Os bancos de dados GeoLite2 gratuitos estão disponíveis no site da Maxmind (é necessário se inscrever)

Exemplo de Uso:

http {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        auto_reload 5m;
        $geoip2_metadata_country_build metadata build_epoch;
        $geoip2_data_country_code default=US source=$variable_with_ip country iso_code;
        $geoip2_data_country_name country names en;
    }

    geoip2 /etc/maxmind-city.mmdb {
        $geoip2_data_city_name default=London city names en;
    }
    ....

    fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param CITY_NAME    $geoip2_data_city_name;
    ....
}

stream {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        $geoip2_data_country_code default=US source=$remote_addr country iso_code;
    }
    ...
}
Metadados:

Recupere metadados sobre o banco de dados geoip.

$variable_name metadata <field>
Campos disponíveis: - build_epoch: o timestamp de construção do banco de dados maxmind. - last_check: a última vez que o banco de dados foi verificado para alterações (ao usar auto_reload) - last_change: a última vez que o banco de dados foi recarregado (ao usar auto_reload)

Autoreload (padrão: desativado):

Ativar o auto reload fará com que o nginx verifique o tempo de modificação do banco de dados no intervalo especificado e o recarregue se tiver mudado.

auto_reload <interval>

GeoIP:

$variable_name [default=<value] [source=$variable_with_ip] path ...
Se o padrão não for especificado, a variável ficará vazia se não for encontrada.

Se a fonte não for especificada, $remote_addr será usada para realizar a busca.

Para encontrar o caminho dos dados que você deseja (por exemplo: country names en), use a ferramenta mmdblookup:

$ mmdblookup --file /usr/share/GeoIP/GeoIP2-Country.mmdb --ip 8.8.8.8

  {
    "country":
      {
        "geoname_id":
          6252001 <uint32>
        "iso_code":
          "US" <utf8_string>
        "names":
          {
            "de":
              "USA" <utf8_string>
            "en":
              "United States" <utf8_string>
          }
      }
  }

$ mmdblookup --file /usr/share/GeoIP/GeoIP2-Country.mmdb --ip 8.8.8.8 country names en

  "United States" <utf8_string>

Isso se traduz em:

$country_name "default=United States" source=$remote_addr country names en
Comandos Adicionais:

Esses comandos funcionam da mesma forma que o original ngx_http_geoip_module documentado aqui: http://nginx.org/en/docs/http/ngx_http_geoip_module.html#geoip_proxy.

No entanto, se você fornecer a opção source=$variable_with_ip em uma variável, essas configurações serão ignoradas para essa variável específica.

geoip2_proxy < cidr >
Define endereços confiáveis. Quando uma solicitação vem de um endereço confiável, um endereço do campo de cabeçalho de solicitação "X-Forwarded-For" será usado em vez disso.

geoip2_proxy_recursive < on | off >
Se a busca recursiva estiver desativada, em vez do endereço original do cliente que corresponde a um dos endereços confiáveis, o último endereço enviado em "X-Forwarded-For" será usado. Se a busca recursiva estiver ativada, em vez do endereço original do cliente que corresponde a um dos endereços confiáveis, o último endereço não confiável enviado em "X-Forwarded-For" será usado.

GitHub

Você pode encontrar dicas de configuração adicionais e documentação para este módulo no repositório do GitHub para nginx-module-geoip2.