Перейти к содержанию

geoip2: Модуль GeoIP2 для NGINX

Установка для Debian/Ubuntu

Эти документы применимы к пакету APT nginx-module-geoip2, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-geoip2
Показать версии и архитектуры
| Дистрибутив | Версия             | Компонент   | Архитектуры     |
|-------------|--------------------|-------------|------------------|
| debian      | bookworm           | main        | amd64, arm64     |
| debian      | bookworm-mainline  | main        | amd64, arm64     |
| debian      | trixie             | main        | amd64, arm64     |
| debian      | trixie-mainline    | main        | amd64, arm64     |
| ubuntu      | focal              | main        | amd64, arm64     |
| ubuntu      | focal-mainline     | main        | amd64, arm64     |
| ubuntu      | jammy              | main        | amd64, arm64     |
| ubuntu      | jammy-mainline     | main        | amd64, arm64     |
| ubuntu      | noble              | main        | amd64, arm64     |
| ubuntu      | noble-mainline     | main        | amd64, arm64     |

ngx_http_geoip2_module - создает переменные со значениями из баз данных maxmind geoip2, основанными на IP клиента (по умолчанию) или из конкретной переменной (поддерживает как IPv4, так и IPv6).

Теперь модуль поддерживает потоки nginx и может использоваться таким же образом, как и http модуль.

Загрузка базы данных Maxmind GeoLite2 (по желанию)

Бесплатные базы данных GeoLite2 доступны на сайте Maxmind (требуется регистрация).

Пример использования:

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;
    }
    ...
}
Метаданные:

Получите метаданные о базе данных geoip.

$variable_name metadata <field>
Доступные поля: - build_epoch: временная метка сборки базы данных maxmind. - last_check: последнее время, когда база данных проверялась на изменения (при использовании auto_reload) - last_change: последнее время, когда база данных была перезагружена (при использовании auto_reload)

Автоперезагрузка (по умолчанию: отключена):

Включение автоперезагрузки заставит nginx проверять время изменения базы данных через указанные интервалы и перезагружать ее, если она изменилась.

auto_reload <interval>

GeoIP:

$variable_name [default=<value] [source=$variable_with_ip] path ...
Если значение по умолчанию не указано, переменная будет пустой, если не найдена.

Если источник не указан, будет использоваться $remote_addr для выполнения поиска.

Чтобы найти путь к нужным данным (например: country names en), используйте инструмент 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>

Это переводится как:

$country_name "default=United States" source=$remote_addr country names en
Дополнительные команды:

Эти команды работают так же, как и оригинальный ngx_http_geoip_module, описанный здесь: http://nginx.org/en/docs/http/ngx_http_geoip_module.html#geoip_proxy.

Однако, если вы предоставите опцию source=$variable_with_ip для переменной, эти настройки будут игнорироваться для конкретной переменной.

geoip2_proxy < cidr >
Определяет доверенные адреса. Когда запрос поступает с доверенного адреса, используется адрес из заголовка "X-Forwarded-For".

geoip2_proxy_recursive < on | off >
Если рекурсивный поиск отключен, вместо оригинального адреса клиента, который соответствует одному из доверенных адресов, будет использован последний адрес, отправленный в "X-Forwarded-For". Если рекурсивный поиск включен, вместо оригинального адреса клиента, который соответствует одному из доверенных адресов, будет использован последний недоверенный адрес, отправленный в "X-Forwarded-For".