<!-- review: finished -->

<a id="external-brotli"></a>

# Brotli

Это набор из двух модулей:

- `ngx_brotli_filter` — используется для сжатия ответов на лету.
- `ngx_brotli_static` — используется для обработки предварительно сжатых
  файлов.

<a id="installation-4"></a>

## Установка

Для [установки](https://angie.software//angie/docs/installation/index.md#install-packages) модуля используйте один из
следующих пакетов:

- Angie: `angie-module-brotli`;
- Angie PRO: `angie-pro-module-brotli`.

<a id="loading-modules"></a>

## Загрузка модулей

Подключение модулей в контексте `main{}`:

```nginx
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
```

<a id="example-configuration-for-dynamic-compression"></a>

## Пример конфигурации для динамического сжатия

```nginx
server {
    listen 80 default_server;
    brotli on;
    brotli_comp_level 1;
    brotli_types text/plain text/css;

    location / {
        root /usr/share/angie/html;
        index index.html;
    }
}
```

<a id="preparing-for-demonstration"></a>

## Подготовка к демонстрации

Предварительно разместим тестовый файл `war-and-peace.txt`:

```console
$ ls -l /usr/share/angie/html/

  total 3292
  -rw-r--r-- 1 root root     497 Feb 13 07:40 50x.html
  -rw-r--r-- 1 root root     543 Feb 13 07:40 index.html
  -rw-r--r-- 1 root root 3359405 Feb 26 12:47 war-and-peace.txt
```

```console
$ mkdir tmp
```

Запрос на получение сжатого файла:

```console
$ curl -s -H 'Accept-encoding: br' -o tmp/war-and-peace.br localhost/war-and-peace.txt
```

```console
$ ls -l tmp/

  total 1092
  -rw-r--r-- 1 asv asv 1115616 Feb 26 16:52 war-and-peace.br
```

<a id="example-configuration-for-serving-pre-compressed-files"></a>

## Пример конфигурации для обработки предварительно сжатых файлов

```nginx
server {
    listen 80 default_server;

    brotli_static on;
    brotli_types text/plain text/css;

    location / {
        root /usr/share/angie/html;
        index index.html;
    }
}
```

<a id="moving-the-pre-compressed-file"></a>

## Перемещение предварительно сжатого файла

```console
$ sudo mv tmp/war-and-peace.br /usr/share/angie/html/war-and-peace.txt.br

$ ls -l /usr/share/angie/html/

  total 4384
  -rw-r--r-- 1 root root     497 Feb 13 07:40 50x.html
  -rw-r--r-- 1 root root     543 Feb 13 07:40 index.html
  -rw-r--r-- 1 root root 3359405 Feb 26 12:47 war-and-peace.txt
  -rw-r--r-- 1 root root 1115616 Feb 26 16:57 war-and-peace.txt.br
```

Запрос на получение сжатого файла:

```console
$ curl -s -H 'Accept-encoding: br' -o tmp/war-and-peace.br localhost/war-and-peace.txt
```

```console
$ ls -l tmp/

  total 1092
  -rw-r--r-- 1 asv asv 1115616 Feb 26 17:13 war-and-peace.br
```

<a id="combining-dynamic-and-static-compression"></a>

## Совмещение динамического и статического сжатия

В одной конфигурации возможно совмещение использования динамического сжатия
(`brotli on`) и статического выбора (`brotli_static on`). В этом
случае сначала будет производиться поиск соответствующего статического сжатого
файла. Если такой файл не найден, произойдет динамическое сжатие файла,
определенного в запросе.

<a id="additional-information-4"></a>

## Дополнительная информация

Полное описание директив и исходный код доступны по ссылке:
[https://github.com/google/ngx_brotli](https://github.com/google/ngx_brotli).
