<!-- review: finished -->

<a id="adc-http-map"></a>

# Map

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

<a id="adc-configuration-example-28"></a>

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

```nginx
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;
}
```

<a id="adc-directives-29"></a>

## Директивы

<a id="adc-map"></a>

### map

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `map` строка $переменная { ... }   |
|------------------------------------------------------------------------------------------|------------------------------------|
| По умолчанию                                                                             | —                                  |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                               |

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

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

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

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

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

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

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

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

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

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

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

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

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

Например,

```nginx
*.example.com 1;
example.*     1;
```

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

```nginx
example.com   1;
*.example.com 1;
```

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

```nginx
.example.com  1;
```

| `include` файл   | включает файл со значениями. Включений может быть несколько.   |
|------------------|----------------------------------------------------------------|
| `volatile`       | указывает, что переменная не кэшируется.                       |

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

1. Строковое значение без маски.
2. Самое длинное строковое значение с маской в начале, например "`*.example.com`".
3. Самое длинное строковое значение с маской в конце, например "`mail.*`".
4. Первое подходящее регулярное выражение (в порядке следования в конфигурационном файле).
5. Значение по умолчанию (default).

<a id="adc-map-hash-bucket-size"></a>

### map_hash_bucket_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `map_hash_bucket_size` размер;    |
|------------------------------------------------------------------------------------------|-----------------------------------|
| По умолчанию                                                                             | `map_hash_bucket_size 32|64|128;` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                              |

Задает размер корзины в хэш-таблицах для переменных [map](https://angie.software//angie/docs/configuration/modules/http/http_map.md#id3). Значение по умолчанию зависит от размера строки кэша процессора. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

<a id="adc-map-hash-max-size"></a>

### map_hash_max_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `map_hash_max_size` размер;   |
|------------------------------------------------------------------------------------------|-------------------------------|
| По умолчанию                                                                             | `map_hash_max_size 2048;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                          |

Задает максимальный размер хэш-таблиц для переменных [map](https://angie.software//angie/docs/configuration/modules/http/http_map.md#id3). Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).
