geo
Директива `geo` в NGINX определяет переменную, которая может быть установлена на основе IP-адресов клиентов или других географических местоположений. — NGINX HTTP Core
Описание
Директива `geo` используется для создания сопоставления IP-адресов клиентов с переменными, которые могут применяться в различных конфигурациях NGINX. Она особенно полезна при настройке контроля доступа и управлении маршрутизацией запросов на основе географического положения. Эта директива может задавать как IPv4, так и IPv6 адреса и может располагаться внутри контекста `http`. Каждое правило сопоставления состоит из адреса (или диапазона) и необязательной переменной, которая либо содержит значение (например, '1' или '0' для разрешения или запрета доступа), либо устанавливается в 'default' для не совпадающих адресов. Внутри блока `geo` можно указывать отдельные IP-адреса, записи в нотации CIDR или географические диапазоны. NGINX будет проверять IP-адрес клиента по этим правилам в том порядке, в котором они определены. Если найдено соответствие, NGINX установит указанную переменную соответственно. Если адрес не совпал ни с одним правилом, будет применено значение, заданное директивой `default`. Это делает `geo` мощным инструментом для создания динамических конфигураций, реагирующих на разные IP-адреса клиентов, будь то для распределения нагрузки, контроля доступа или настройки приложений. Важно понимать, что директива `geo` должна быть определена в блоке `http`, и она не принимает другие связанные директивы непосредственно внутри себя, что может вызывать путаницу в сложных конфигурациях NGINX. Кроме того, эта директива работает на уровне HTTP и в основном зависит от сетевых деталей входящих запросов, поэтому её следует правильно использовать, исходя из ожидаемых характеристик клиентских запросов.
Пример конфига
geo $remote_addr {
default 0;
192.168.1.0/24 1;
10.0.0.0/8 2;
}Убедитесь, что блок `geo` находится внутри контекста `http`; размещение в другом месте приведёт к ошибкам.
При использовании нотации CIDR убедитесь, что синтаксис корректен, чтобы избежать непреднамеренных совпадений.
Помните, что порядок определений имеет значение: при первом совпадении будет установлено значение переменной.