<!-- review: finished -->

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

# Конфигурационные файлы

Angie использует текстовый конфигурационный файл. По умолчанию этот файл
называется `angie.conf` и находится в соответствии с параметром сборки
[--conf-path](https://angie.software//angie/docs/installation/sourcebuild.md#paths), обычно в директории `/etc/angie`.

Конфигурационный файл обычно состоит из следующих контекстов:

- [events](https://angie.software//angie/docs/configuration/modules/core.md#events) — общая обработка соединений;
- [http](https://angie.software//angie/docs/configuration/modules/http/index.md#d-http) — HTTP-трафик;
- [mail](https://angie.software//angie/docs/configuration/modules/mail/index.md#m-mail) — почтовый трафик;
- [stream](https://angie.software//angie/docs/configuration/modules/stream/index.md#s-stream) — TCP- и UDP-трафик;
- [wasm_modules](https://angie.software//angie/docs/configuration/modules/wasm/index.md#wasm-modules) – среда выполнения WASM.

Директивы, размещенные вне этих контекстов, считаются находящимися в
контексте `main`:

```nginx
user angie; # директива в контексте 'main'

events {

    # конфигурация обработки соединений
}

http {

    # Конфигурация трафика HTTP, для всех вложенных виртуальных серверов

    server {

        # конфигурация виртуального HTTP сервера 1
        location /one {

            # конфигурация обработки HTTP запросов с URI, начинающимися с '/one'
        }
        location /two {

            # конфигурация обработки HTTP запросов с URI, начинающимися с '/two'
        }
    }

    server {

        # конфигурация виртуального HTTP сервера 2
    }
}

stream {

    # Конфигурация трафика TCP/UDP, для всех вложенных виртуальных серверов
    server {

        # конфигурация виртуального TCP сервера 1
    }
}
```

Для упрощения управления конфигурацией рекомендуется использовать директиву
[include](https://angie.software//angie/docs/configuration/modules/core.md#include) в основном файле `angie.conf`, чтобы ссылаться на содержимое
файлов, специфичных для функций:

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

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

## Наследование

В общем случае дочерний контекст (тот, который содержится в другом контексте,
который считается родительским) унаследует настройки директив, определенных на
уровне родителя. Некоторые директивы могут появляться в нескольких контекстах;
в таких случаях вы можете переопределить настройки, унаследованные от родителя,
включив директиву в дочерний контекст.

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

## Синтаксис

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

### Единицы измерения

Размеры можно указывать в следующих единицах:

| Без суффикса   | Байты     |
|----------------|-----------|
| `k`, `K`       | Килобайты |
| `m`, `M`       | Мегабайты |
| `g`, `G`       | Гигабайты |

Например: `1024`, `8k`, `1m`, `16g`.

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

| `ms`   | Миллисекунды                             |
|--------|------------------------------------------|
| `s`    | Секунды                                  |
| `m`    | Минуты                                   |
| `h`    | Часы                                     |
| `d`    | Дни                                      |
| `w`    | Недели                                   |
| `M`    | Месяцы (принято считать равными 30 дням) |
| `y`    | Годы (принято считать равными 365 дням)  |

Несколько единиц могут быть объединены в одном значении, указывая их в порядке
от наиболее значимого к наименее значимому, при необходимости разделяя
пробелами. Например, `"1h 30m"` обозначает тот же промежуток времени, что
и `"90m"` или `"5400s"`. Значение без суффикса интерпретируется как
секунды. Рекомендуется всегда указывать суффикс.

Некоторые интервалы времени могут быть указаны только с разрешением в секундах.

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

### Директивы

Каждая директива состоит из имени и набора параметров.
Если какая-либо часть директивы должна содержать пробелы,
они должна быть заключены в кавычки или экранированы:

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

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

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

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

## Настройка хэшей

Для эффективной обработки статических наборов данных, таких как имена серверов,
значения директивы [map](https://angie.software//angie/docs/configuration/modules/http/http_map.md#id3), MIME-типы и имена заголовков запросов, Angie
использует хэш-таблицы. При запуске и каждом переопределении конфигурации
Angie определяет оптимальный размер для этих хэш-таблиц, чтобы размер
корзины, которая хранит ключи с одинаковыми хэш-значениями, не превышал заданный
параметр (hash bucket size). Размер таблицы измеряется в корзинах и
корректируется до тех пор, пока не превысит параметр hash max size.
Большинство хэш-таблиц имеют соответствующие директивы для настройки этих
параметров, такие как [server_names_hash_max_size](https://angie.software//angie/docs/configuration/modules/http/index.md#server-names-hash-max-size) и
[server_names_hash_bucket_size](https://angie.software//angie/docs/configuration/modules/http/index.md#server-names-hash-bucket-size) для имен серверов.

Параметр hash bucket size выравнивается по кратности размера линии кэша
процессора. Такое выравнивание улучшает эффективность поиска ключей на
современных процессорах, уменьшая количество обращений к памяти. Если hash
bucket size равен размеру одной линии кэша, максимальное количество обращений к
памяти во время поиска ключа будет два: одно для вычисления адреса корзины и
второе для поиска внутри корзины. Поэтому, если Angie сообщает, что следует
увеличить либо hash max size, либо hash bucket size, начните с увеличения
hash max size.

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

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

Чтобы применить изменения в конфигурационном файле, его необходимо
перезагрузить. Вы можете либо перезапустить процесс Angie с предварительной
проверкой синтаксиса конфигурации:

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

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

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