geo

Директива `geo` в NGINX определяет переменную, которая может быть установлена на основе IP-адресов клиентов или других географических местоположений.

Синтаксисgeo $variable { default value; range1 value1; range2 value2; ... }
По умолчаниюnone
Контекстhttp
Аргументыblock (1-2)

Описание

Директива 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 убедитесь, что синтаксис корректен, чтобы избежать непреднамеренных совпадений.

Помните, что порядок определений имеет значение: при первом совпадении будет установлено значение переменной.

← Ко всем директивам