Модуль ngx_http_geo_module
Пример конфигурации Директивы geo |
Модуль ngx_http_geo_module
создаёт переменные,
значения которых зависят от 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 [ |
---|---|
Умолчание: | — |
Контекст: |
http |
Описывает для указанной переменной зависимость значения от
IP-адреса клиента.
По умолчанию адрес берётся из переменной $remote_addr
,
но его также можно получить из другой переменной (0.7.27), например:
geo $arg_remote_addr $geo { ...; }
Поскольку переменные вычисляются только в момент использования,
само по себе наличие даже большого числа объявлений переменных
“geo
” не влечёт за собой никаких дополнительных
расходов на обработку запросов.
Если значение переменной не представляет из себя правильный IP-адрес,
то используется адрес “255.255.255.255
”.
Адреса задаются либо префиксами в формате CIDR (включая одиночные адреса), либо в виде диапазонов (0.7.23).
IPv6-префиксы поддерживаются начиная с версий 1.3.10 и 1.2.7.
Также поддерживаются следующие специальные параметры:
delete
- удаляет описанную сеть (0.7.23).
default
-
значение переменной, если адрес клиента не соответствует
ни одному из заданных адресов.
При задании адресов в формате CIDR
вместо
default
можно использовать “0.0.0.0/0
” и “::/0
”. Если параметрdefault
не указан, значением по умолчанию будет пустая строка. include
- включает файл с адресами и значениями. Включений может быть несколько.
proxy
-
задаёт доверенные адреса (0.8.7, 0.7.63),
при запросе с которых будет использоваться адрес в переданном
поле заголовка запроса “X-Forwarded-For”.
В отличие от обычных адресов, доверенные адреса проверяются
последовательно.
Доверенные IPv6-адреса поддерживаются начиная с версий 1.3.0 и 1.2.1.
proxy_recursive
- включает рекурсивный поиск адреса (1.3.0, 1.2.1). При выключенном рекурсивном поиске вместо исходного адреса клиента, совпадающего с одним из доверенных адресов, будет использоваться последний адрес, переданный в “X-Forwarded-For”. При включённом рекурсивном поиске вместо исходного адреса клиента, совпадающего с одним из доверенных адресов, будет использоваться последний не доверенный адрес, переданный в “X-Forwarded-For”.
ranges
- указывает, что адреса задаются в виде диапазонов (0.7.23). Этот параметр должен быть первым. Для ускорения загрузки гео-базы нужно располагать адреса в порядке возрастания.
Пример:
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; }