<!-- review: finished -->

<a id="configfile"></a>

# Arquivos de Configuração

O Angie usa um arquivo de configuração baseado em texto. Por padrão, este arquivo é nomeado
`angie.conf` e está localizado de acordo com o parâmetro de compilação
[--conf-path](https://pt.angie.software//angie/docs/installation/sourcebuild.md#paths), tipicamente no diretório `/etc/angie`.

Um arquivo de configuração geralmente consiste nos seguintes contextos:

- [events](https://pt.angie.software//angie/docs/configuration/modules/core.md#events) – Processamento geral de conexões
- [http](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#d-http) – Tráfego HTTP
- [mail](https://pt.angie.software//angie/docs/configuration/modules/mail/index.md#m-mail) – Tráfego de email
- [stream](https://pt.angie.software//angie/docs/configuration/modules/stream/index.md#s-stream) – Tráfego TCP e UDP
- [wasm_modules](https://pt.angie.software//angie/docs/configuration/modules/wasm/index.md#wasm-modules) – Runtime WASM

Diretivas que são colocadas fora desses contextos são consideradas como estando no
contexto `main`:

```nginx
user angie; # uma diretiva no contexto 'main'

events {

    # configuração do processamento de conexões
}

http {

    # Configuração específica para HTTP e que afeta todos os servidores virtuais

    server {

        # configuração do servidor virtual HTTP 1
        location /one {

            # configuração para processar URIs que começam com '/one'
        }
        location /two {

            # configuração para processar URIs que começam com '/two'
        }
    }

    server {

        # configuração do servidor virtual HTTP 2
    }
}

stream {

    # Configuração específica para TCP/UDP e que afeta todos os servidores virtuais
    server {

        # configuração do servidor virtual TCP 1
    }
}
```

Para simplificar o gerenciamento da configuração, recomendamos usar a diretiva [include](https://pt.angie.software//angie/docs/configuration/modules/core.md#include)
no arquivo principal `angie.conf` para referenciar o conteúdo de
arquivos específicos por funcionalidade:

```nginx
include /etc/angie/http.d/*.conf;
include /etc/angie/stream.d/*.conf;
```

<a id="inheritance"></a>

## Herança

Em geral, um contexto filho (aquele que está contido dentro de outro contexto, que
é considerado seu pai) herda as configurações das diretivas definidas no
nível pai. Algumas diretivas podem aparecer em múltiplos contextos; nesses casos,
você pode sobrescrever as configurações herdadas do pai incluindo a
diretiva no contexto filho.

<a id="syntax"></a>

## Sintaxe

<a id="measurement-units"></a>

### Unidades de Medida

Você pode especificar tamanhos usando as seguintes unidades:

| Sem sufixo   | Bytes     |
|--------------|-----------|
| `k`, `K`     | Kilobytes |
| `m`, `M`     | Megabytes |
| `g`, `G`     | Gigabytes |

Por exemplo: `1024`, `8k`, `1m`, `16g`.

Intervalos de tempo podem ser especificados em milissegundos, segundos, minutos, horas, dias,
e assim por diante, usando os seguintes sufixos:

| `ms`   | Milissegundos                           |
|--------|-----------------------------------------|
| `s`    | Segundos                                |
| `m`    | Minutos                                 |
| `h`    | Horas                                   |
| `d`    | Dias                                    |
| `w`    | Semanas                                 |
| `M`    | Meses (assumidos como iguais a 30 dias) |
| `y`    | Anos (assumidos como iguais a 365 dias) |

Múltiplas unidades podem ser combinadas em um único valor especificando-as em ordem
da mais significativa para a menos significativa, opcionalmente separadas por
espaços em branco. Por exemplo, `"1h 30m"` especifica a mesma duração que
`"90m"` ou `"5400s"`. Um valor sem sufixo é interpretado como
segundos. É recomendado sempre especificar um sufixo.

Alguns intervalos de tempo só podem ser especificados com resolução de segundos.

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

### Diretivas

Cada diretiva consiste em um nome e um conjunto de parâmetros.
Se qualquer parte de uma diretiva precisar conter espaços,
ela deve ser colocada entre aspas ou escapar os espaços:

```nginx
add_header X-MyHeader "foo bar";
add_header X-MyHeader foo\ bar;
```

Se um parâmetro nomeado precisar de espaços e você usar aspas,
seu nome também deve ser colocado entre aspas:

```nginx
server example.com "sid=server 1";
```

<a id="configure-hashes"></a>

## Configurando Hashes

Para processar eficientemente conjuntos estáticos de dados, como nomes de servidor, valores da diretiva [map](https://pt.angie.software//angie/docs/configuration/modules/http/http_map.md#id1),
tipos MIME e nomes de cabeçalhos de requisição, o Angie utiliza tabelas
hash. Durante a inicialização e cada reconfiguração, o Angie determina o
tamanho ótimo para essas tabelas hash para garantir que o tamanho do bucket, que armazena
chaves com valores hash idênticos, não exceda o parâmetro configurado (hash
bucket size). O tamanho da tabela é medido em buckets e é ajustado até exceder
o parâmetro hash max size. A maioria das tabelas hash têm diretivas correspondentes
para ajustar esses parâmetros, como [server_names_hash_max_size](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#server-names-hash-max-size)
e [server_names_hash_bucket_size](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#server-names-hash-bucket-size) para nomes de servidor.

O parâmetro hash bucket size é alinhado a um múltiplo do tamanho da
linha de cache do processador. Este alinhamento melhora a eficiência da busca de chaves em
processadores modernos reduzindo o número de acessos à memória. Se o hash bucket size
for igual ao tamanho de uma linha de cache, o número máximo de acessos à memória durante uma
busca de chave será dois: um para calcular o endereço do bucket e outro para buscar
dentro do bucket. Portanto, se o Angie indicar que o hash max
size ou hash bucket size deve ser aumentado, comece aumentando o hash
max size.

<a id="configfile-reloading"></a>

### Recarregando a Configuração

Para aplicar mudanças no arquivo de configuração, ele deve ser recarregado. Você pode
reiniciar o processo do Angie com uma verificação de sintaxe da configuração antes:

```console
$ sudo angie -t && sudo service angie restart
```

Alternativamente, você pode recarregar o serviço para aplicar a nova configuração sem
interromper o processamento das requisições atuais:

```console
$ sudo angie -t && sudo service angie reload
```
