<!-- review: finished -->

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

# Map

Cria variáveis cujos valores dependem de valores de outras variáveis.

<a id="configuration-example-62"></a>

## Exemplo de Configuração

```nginx
map $remote_addr $limit {
    127.0.0.1    "";
    default      $binary_remote_addr;
}

limit_conn_zone $limit zone=addr:10m;
limit_conn addr 1;
```

<a id="directives-71"></a>

## Diretivas

<a id="index-0"></a>

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

### map

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `map` string $variable { ... };   |
|-------------------------------------------------------------------------------------------|-----------------------------------|
| Padrão                                                                                    | —                                 |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream                            |

Cria uma nova variável.
Seu valor depende do primeiro parâmetro, especificado como uma string com variáveis,
por exemplo:

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

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

Aqui, a variável `$new_variable` terá um valor
composto pelas duas variáveis `$var1` e `$var2`,
ou um valor padrão se essas variáveis não estiverem definidas.

#### NOTE
Como as variáveis são avaliadas apenas quando são usadas, a mera declaração mesmo de um grande número de variáveis "map" não adiciona custos extras ao processamento de requisições.

Parâmetros dentro do bloco `map` especificam um mapeamento entre valores de origem e resultantes.

Valores de origem são especificados como strings ou expressões regulares.

Strings são comparadas ignorando maiúsculas e minúsculas.

Uma expressão regular deve começar com o símbolo `~` para correspondência sensível a maiúsculas e minúsculas, ou com os símbolos `~*` para correspondência insensível a maiúsculas e minúsculas. Uma expressão regular pode conter capturas nomeadas e posicionais que podem ser usadas posteriormente em outras diretivas junto com a variável resultante.

Se um valor de origem corresponder a um dos nomes dos parâmetros especiais descritos abaixo, ele deve ser prefixado com o símbolo `\`.

O valor resultante pode conter texto, variáveis e sua combinação.

Os seguintes parâmetros especiais também são suportados:

| `default` value   | define o valor resultante se o valor de origem não corresponder a nenhuma das variantes especificadas. Quando default não é especificado, o valor resultante padrão será uma string vazia.   |
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `hostnames`       | indica que valores de origem podem ser nomes de host com uma máscara de prefixo ou sufixo. Este parâmetro deve ser especificado antes da lista de valores.                                   |

Por exemplo,

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

Os seguintes dois registros

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

podem ser combinados:

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

| `include` file   | inclui um arquivo com valores. Pode haver várias inclusões.   |
|------------------|---------------------------------------------------------------|
| `volatile`       | indica que a variável não é cacheável.                        |

Se o valor de origem corresponder a mais de uma das variantes especificadas, por exemplo, tanto uma máscara quanto uma expressão regular correspondem, a primeira variante correspondente será escolhida, na seguinte ordem de prioridade:

1. Valor string sem máscara
2. Valor string mais longo com máscara de prefixo, por exemplo `*.example.com`
3. Valor string mais longo com máscara de sufixo, por exemplo `mail.*`
4. Primeira expressão regular correspondente (na ordem de aparição no arquivo de configuração)
5. Valor padrão (`default`)

<a id="index-1"></a>

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

### map_hash_bucket_size

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `map_hash_bucket_size` size;      |
|-------------------------------------------------------------------------------------------|-----------------------------------|
| Padrão                                                                                    | `map_hash_bucket_size 32|64|128;` |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream                            |

Define o tamanho do bucket para as tabelas hash das variáveis [map](#s-map). O valor padrão depende do tamanho da linha de cache do processador. Os detalhes da configuração de tabelas hash são fornecidos [separadamente](https://pt.angie.software//angie/docs/configuration/configfile.md#configure-hashes).

<a id="index-2"></a>

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

### map_hash_max_size

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `map_hash_max_size` size;   |
|-------------------------------------------------------------------------------------------|-----------------------------|
| Padrão                                                                                    | `map_hash_max_size 2048;`   |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream                      |

Define o tamanho máximo das tabelas hash das variáveis [map](#s-map). Os detalhes da configuração de tabelas hash são fornecidos [separadamente](https://pt.angie.software//angie/docs/configuration/configfile.md#configure-hashes).
