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#
Создает новую переменную. Ее значение зависит от первого параметра, заданного строкой с переменными, например:
set $var1 "foo";
set $var2 "bar";
map $var1$var2 $new_variable {
default "foobar_value";
}
Здесь переменная $new_variable
будет иметь значение,
составленное из двух переменных $var1
и $var2
,
или значение по умолчанию, если эти переменные не определены.
Примечание
Поскольку переменные вычисляются только в момент использования, само по себе наличие даже большого числа объявлений переменных "map" не влечет за собой никаких дополнительных расходов на обработку запросов.
Параметры внутри блока map задают соответствие между исходными и результирующими значениями.
Исходные значения задаются строками или регулярными выражениями.
Строки проверяются без учета регистра.
Перед регулярным выражением ставится символ "~", если при сравнении следует учитывать регистр символов, либо символы "~*", если регистр символов учитывать не нужно. Регулярное выражение может содержать именованные и позиционные выделения, которые могут затем использоваться в других директивах совместно с результирующей переменной.
Если исходное значение совпадает с именем одного из специальных параметров, описанных ниже, перед ним следует поставить символ "".
В качестве результирующего значения можно указать текст, переменную и их комбинации.
Также поддерживаются следующие специальные параметры:
|
задает результирующее значение, если исходное значение не совпадает ни с одним из перечисленных. Если параметр default не указан, результирующим значением по умолчанию будет пустая строка. |
|
указывает, что в качестве исходных значений можно использовать маску для первой или последней части имени хоста. Этот параметр следует указывать перед списком значений. |
Например,
*.example.com 1;
example.* 1;
Вместо двух записей
example.com 1;
*.example.com 1;
можно использовать одну:
.example.com 1;
|
включает файл со значениями. Включений может быть несколько. |
|
указывает, что переменная не кэшируется. |
Если исходному значению соответствует несколько из указанных вариантов, например, одновременно подходят и маска, и регулярное выражение, будет выбран первый подходящий вариант в следующем порядке приоритета:
строковое значение без маски
самое длинное строковое значение с маской в начале, например "*.example.com"
самое длинное строковое значение с маской в конце, например "mail.*"
первое подходящее регулярное выражение (в порядке следования в конфигурационном файле)
значение по умолчанию (default)
map_hash_bucket_size#
Задает размер корзины в хэш-таблицах для переменных map. Значение по умолчанию зависит от размера строки кэша процессора. Подробнее настройка хэш-таблиц обсуждается отдельно.
map_hash_max_size#
Задает максимальный размер хэш-таблиц для переменных map. Подробнее настройка хэш-таблиц обсуждается отдельно.