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

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

Angie ADC использует текстовый конфигурационный файл. По умолчанию этот файл
называется `angie.conf` и обычно находится в директории `/etc/angie`.

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

- [events](https://angie.software//adc/docs/configuration_lb/reference/core.md#adc-events) — общая обработка соединений;
- [http](https://angie.software//adc/docs/configuration_lb/reference/http/http.md#adc-d-http) — HTTP-трафик;
- [stream](https://angie.software//adc/docs/configuration_lb/reference/stream/stream.md#adc-s-stream) — TCP- и UDP-трафик.

Директивы, размещенные вне этих контекстов, считаются находящимися в
контексте `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//adc/docs/configuration_lb/reference/core.md#adc-include) в основном файле `angie.conf`, чтобы ссылаться на содержимое
файлов, специфичных для функций:

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

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

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

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

<a id="adc-syntax"></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"`. Значение без суффикса интерпретируется как
секунды. Рекомендуется всегда указывать суффикс.

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

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

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

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

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

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

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

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

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

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

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

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

Перезагрузка конфигурационного файла происходит автоматически при сохранении изменений
в конфигурации балансировщика нагрузки. Подробнее см. [Просмотр и редактирование конфигурации](https://angie.software//adc/docs/configuration_lb/config.md#adc-load-balancer-config).
