Модуль ngx_stream_geo_module
| Пример конфигурации Директивы geo |
Модуль ngx_stream_geo_module (1.11.3) создаёт переменные,
значения которых зависят от 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 [ |
|---|---|
| Умолчание: | — |
| Контекст: |
stream |
Описывает для указанной переменной зависимость значения от
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- включает файл с адресами и значениями. Включений может быть несколько.
ranges- указывает, что адреса задаются в виде диапазонов. Этот параметр должен быть первым. Для ускорения загрузки гео-базы нужно располагать адреса в порядке возрастания.
volatile- указывает, что переменная не кэшируется (1.29.3).
Пример:
geo $country {
default ZZ;
include conf/geo.conf;
delete 127.0.0.0/16;
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;
}