Модуль http_geo

Модуль http_geo#

Создает переменные, значения которых зависят от IP-адреса клиента.

Пример конфигурации#

geo $geo {
    default        0;

    127.0.0.1      2;
    192.168.1.0/24 1;
    10.1.0.0/16    1;

    ::1            2;
    2001:0db8::/32 1;
}

Директивы#

geo#

Синтаксис:

geo [$адрес] $переменная { … }

Умолчание:

Контекст:

http

Описывает для указанной переменной зависимость значения от IP-адреса клиента. По умолчанию адрес берется из переменной $remote_addr, но его также можно получить из другой переменной, например:

geo $arg_remote_addr $geo {
    ...;
}

Примечание

Поскольку переменные вычисляются только в момент использования, само по себе наличие даже большого числа объявлений переменных geo не влечет за собой никаких дополнительных расходов на обработку запросов.

Если значение переменной не представляет из себя правильный IP-адрес, то используется адрес «255.255.255.255».

Адреса задаются либо префиксами в формате CIDR (включая одиночные адреса), либо в виде диапазонов.

Также поддерживаются следующие специальные параметры:

delete

удаляет описанную сеть

default

значение переменной, если адрес клиента не соответствует ни одному из заданных адресов. При задании адресов в формате CIDR вместо default можно использовать «0.0.0.0/0» и «::/0». Если параметр default не указан, значением по умолчанию будет пустая строка.

include

включает файл с адресами и значениями. Включений может быть несколько.

proxy

задает доверенные адреса, при запросе с которых будет использоваться адрес в переданном поле заголовка запроса «X-Forwarded-For». В отличие от обычных адресов, доверенные адреса проверяются последовательно.

proxy_recursive

включает рекурсивный поиск адреса. При выключенном рекурсивном поиске вместо исходного адреса клиента, совпадающего с одним из доверенных адресов, будет использоваться последний адрес, переданный в «X-Forwarded-For». При включенном рекурсивном поиске вместо исходного адреса клиента, совпадающего с одним из доверенных адресов, будет использоваться последний не доверенный адрес, переданный в «X-Forwarded-For».

ranges

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

Пример:

geo $country {
    default        ZZ;
    include        conf/geo.conf;
    delete         127.0.0.0/16;
    proxy          192.168.100.0/24;
    proxy          2001:0db8::/32;

    127.0.0.0/24   US;
    127.0.0.1/32   RU;
    10.1.0.0/16    RU;
    192.168.1.0/24 UK;
}

В файле conf/geo.conf могут быть такие строки:

10.2.0.0/16    RU;
192.168.2.0/24 RU;

В качестве значения выбирается максимальное совпадение, например, для адреса 127.0.0.1 будет выбрано значение RU, а не US.

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

geo $country {
    ranges;
    default                   ZZ;
    127.0.0.0-127.0.0.0       US;
    127.0.0.1-127.0.0.1       RU;
    127.0.0.2-127.0.0.255     US;
    10.1.0.0-10.1.255.255     RU;
    192.168.1.0-192.168.1.255 UK;
}