Map#

Создает переменные, значения которых зависят от значений других переменных.

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

map $http_host $name {
    hostnames;

    default       0;

    example.com   1;
    *.example.com 1;
    example.org   2;
    *.example.org 2;
    .example.net  3;
    wap.*         4;
}

map $http_user_agent $mobile {
    default       0;
    "~Opera Mini" 1;
}

Директивы#

map#

Синтаксис

map строка $переменная { ... };

По умолчанию

Контекст

http

Создает новую переменную. Ее значение зависит от первого параметра, заданного строкой с переменными, например:

set $var1 "foo";
set $var2 "bar";

map $var1$var2 $new_variable {
    default "foobar_value";
}

Здесь переменная $new_variable будет иметь значение, составленное из двух переменных $var1 и $var2, или значение по умолчанию, если эти переменные не определены.

Примечание

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

Параметры внутри блока map задают соответствие между исходными и результирующими значениями.

Исходные значения задаются строками или регулярными выражениями.

Строки проверяются без учета регистра.

Перед регулярным выражением ставится символ "~", если при сравнении следует учитывать регистр символов, либо символы "~*", если регистр символов учитывать не нужно. Регулярное выражение может содержать именованные и позиционные выделения, которые могут затем использоваться в других директивах совместно с результирующей переменной.

Если исходное значение совпадает с именем одного из специальных параметров, описанных ниже, перед ним следует поставить символ "".

В качестве результирующего значения можно указать текст, переменную и их комбинации.

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

default значение

задает результирующее значение, если исходное значение не совпадает ни с одним из перечисленных. Если параметр default не указан, результирующим значением по умолчанию будет пустая строка.

hostnames

указывает, что в качестве исходных значений можно использовать маску для первой или последней части имени хоста. Этот параметр следует указывать перед списком значений.

Например,

*.example.com 1;
example.*     1;

Вместо двух записей

example.com   1;
*.example.com 1;

можно использовать одну:

.example.com  1;

include файл

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

volatile

указывает, что переменная не кэшируется.

Если исходному значению соответствует несколько из указанных вариантов, например, одновременно подходят и маска, и регулярное выражение, будет выбран первый подходящий вариант в следующем порядке приоритета:

  1. строковое значение без маски

  2. самое длинное строковое значение с маской в начале, например "*.example.com"

  3. самое длинное строковое значение с маской в конце, например "mail.*"

  4. первое подходящее регулярное выражение (в порядке следования в конфигурационном файле)

  5. значение по умолчанию (default)

map_hash_bucket_size#

Синтаксис

map_hash_bucket_size размер;

По умолчанию

map_hash_bucket_size 32|64|128;

Контекст

http

Задает размер корзины в хэш-таблицах для переменных map. Значение по умолчанию зависит от размера строки кэша процессора. Подробнее настройка хэш-таблиц обсуждается отдельно.

map_hash_max_size#

Синтаксис

map_hash_max_size размер;

По умолчанию

map_hash_max_size 2048;

Контекст

http

Задает максимальный размер хэш-таблиц для переменных map. Подробнее настройка хэш-таблиц обсуждается отдельно.