<a id="http-core"></a>

# HTTP-модуль

Базовый HTTP-модуль реализует основную функциональность HTTP-сервера: это
определение серверных блоков, настройка локаций для маршрутизации запросов,
передача статических файлов и контроль доступа, настройка перенаправлений,
поддержка соединений keep-alive и управление заголовками запросов и ответов.

Остальные модули этого раздела расширяют эту функциональность, позволяя гибко
настраивать и оптимизировать работу HTTP-сервера под различные сценарии и
требования.

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

## Директивы

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

<a id="absolute-redirect"></a>

### absolute_redirect

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `absolute_redirect` `on` | `off`;   |
|------------------------------------------------------------------------------------------|-------------------------------------|
| По умолчанию                                                                             | `absolute_redirect on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location              |

Если запрещено, то перенаправления, выдаваемые Angie, будут относительными.

См. также директивы [server_name_in_redirect](#server-name-in-redirect) и [port_in_redirect](#port-in-redirect).

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

<a id="aio"></a>

### aio

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `aio` `on` | `off` | `threads` [=пул];   |
|------------------------------------------------------------------------------------------|------------------------------------------|
| По умолчанию                                                                             | `aio off;`                               |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                   |

Разрешает или запрещает использование файлового асинхронного ввода-вывода (AIO) во FreeBSD и Linux:

```nginx
location /video/ {
  aio            on;
  output_buffers 1 64k;
}
```

Во FreeBSD AIO можно использовать, начиная с FreeBSD 4.3. До FreeBSD 11.0 AIO можно либо собрать в ядре статически:

```nginx
options VFS_AIO
```

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

```nginx
kldload aio
```

В Linux AIO можно использовать только начиная с версии ядра 2.6.22. Кроме того, необходимо также дополнительно включить [directio](#directio), иначе чтение будет блокирующимся:

```nginx
location /video/ {
  aio            on;
  directio       512;
  output_buffers 1 128k;
}
```

В Linux [directio](#directio) можно использовать только для чтения блоков, выравненных на границу 512 байт (или 4К для XFS). Невыравненный конец файла будет читаться блокированно. То же относится к запросам с указанием диапазона запрашиваемых байт (byte-range requests) и к запросам FLV не с начала файла: чтение невыравненных начала и конца ответа будет блокирующимся.

При одновременном включении AIO и [sendfile](#sendfile) в Linux для файлов, размер которых больше либо равен указанному в директиве [directio](#directio), будет использоваться AIO, а для файлов меньшего размера или при выключенном [directio](#directio) — [sendfile](#sendfile):

```nginx
location /video/ {
  sendfile       on;
  aio            on;
  directio       8m;
}
```

Кроме того, читать и [отправлять](#sendfile) файлы можно в многопоточном режиме, не блокируя при этом рабочий процесс:

```nginx
location /video/ {
  sendfile       on;
  aio            threads;
}
```

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

```nginx
aio threads=pool$disk;
```

Использование `aio on` требует сборки с конфигурационным параметром
`--with-file-aio`. Для использования `aio threads` требуется сборка
с параметром `--with-threads`.

В настоящий момент многопоточность совместима только с методами [epoll](https://angie.software//angie/docs/configuration/processing.md#epoll), [kqueue](https://angie.software//angie/docs/configuration/processing.md#kqueue) и [eventport](https://angie.software//angie/docs/configuration/processing.md#eventport). Отправка файлов в многопоточном режиме поддерживается
только на Linux.

См. также директиву [sendfile](#sendfile).

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

<a id="aio-write"></a>

### aio_write

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `aio_write` `on` | `off`;   |
|------------------------------------------------------------------------------------------|-----------------------------|
| По умолчанию                                                                             | `aio_write off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location      |

При включенном [aio](#aio) разрешает его использование для записи файлов. В настоящий момент это работает только при использовании `aio threads` и ограничено записью временных файлов с данными, полученными от проксируемых серверов.

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

<a id="alias"></a>

### alias

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `alias` путь;   |
|------------------------------------------------------------------------------------------|-----------------|
| По умолчанию                                                                             | —               |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | location        |

Задает замену для указанного `location`'а. Например, при такой конфигурации:

```nginx
location /i/ {
  alias /data/w3/images/;
}
```

на запрос `/i/top.gif` будет отдан файл /data/w3/images/top.gif.

В значении параметра путь можно использовать переменные, кроме [$document_root](#v-document-root) и [$realpath_root](#v-realpath-root).

Если `alias` используется внутри `location`'а, заданного регулярным выражением, то регулярное выражение должно содержать группы захвата, а сам `alias` — ссылки на эти группы, например:

```nginx
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
  alias /data/w3/images/$1;
}
```

Если `location` и последняя часть значения директивы совпадают:

```nginx
location /images/ {
  alias /data/w3/images/;
}
```

то лучше воспользоваться директивой [root](#root):

```nginx
location /images/ {
  root /data/w3;
}
```

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

<a id="auth-delay"></a>

### auth_delay

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `auth_delay` время;    |
|------------------------------------------------------------------------------------------|------------------------|
| По умолчанию                                                                             | `auth_delay 0s;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location |

Задерживает обработку неавторизованных запросов с кодом ответа 401 для предотвращения атак по времени в случае ограничения доступа по [паролю](https://angie.software//angie/docs/configuration/modules/http/http_auth_basic.md#http-auth-basic) или по [результату подзапроса](https://angie.software//angie/docs/configuration/modules/http/http_auth_request.md#http-auth-request).

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

<a id="auto-redirect"></a>

### auto_redirect

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `auto_redirect` [`on` | `off` | `default`];   |
|------------------------------------------------------------------------------------------|-----------------------------------------------|
| По умолчанию                                                                             | `auto_redirect default;`                      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                        |

Контролирует поведение [перенаправления](#location-redirect),
когда префикс `location` заканчивается косой чертой:

```nginx
location /prefix/ {
    auto_redirect on;
}
```

Здесь запрос к `/prefix` будет перенаправлен на `/prefix/`.

Значение `on` включает перенаправление в явном виде;
`off` отключает его.
Если указано `default`, перенаправление включается,
только если `location` обрабатывает запросы через [api](https://angie.software//angie/docs/configuration/modules/http/http_api.md#a-api),
[proxy_pass](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass), [fastcgi_pass](https://angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#fastcgi-pass), [uwsgi_pass](https://angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-pass), [scgi_pass](https://angie.software//angie/docs/configuration/modules/http/http_scgi.md#scgi-pass),
[memcached_pass](https://angie.software//angie/docs/configuration/modules/http/http_memcached.md#memcached-pass), или [grpc_pass](https://angie.software//angie/docs/configuration/modules/http/http_grpc.md#grpc-pass).

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

<a id="chunked-transfer-encoding"></a>

### chunked_transfer_encoding

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `chunked_transfer_encoding` `on` | `off`;   |
|------------------------------------------------------------------------------------------|---------------------------------------------|
| По умолчанию                                                                             | `chunked_transfer_encoding on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                      |

Позволяет запретить формат передачи данных частями (chunked transfer encoding) в HTTP/1.1. Это может понадобиться при использовании программ, не поддерживающих chunked encoding, несмотря на требования стандарта.

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

<a id="client"></a>

### client

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client` { ... }   |
|------------------------------------------------------------------------------------------|--------------------|
| По умолчанию                                                                             | —                  |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http               |

Создает специальный контекст `client`
для обработки внутренних HTTP-запросов,
которые Angie выполняет самостоятельно без участия внешних клиентов.

Контекст `client` изолирует служебный трафик
различных модулей Angie от пользовательского трафика,
позволяя дополнительно управлять им.
Внутри этого контекста можно определять только именованные `location`
(с префиксом `@`);
они недоступны для внешних HTTP-запросов
и могут вызываться только программно через внутренние механизмы сервера.

Контекст `client` используется для:

- отправки запросов к центру сертификации в модуле [ACME](https://angie.software//angie/docs/configuration/modules/http/http_acme.md#http-acme)
  через предопределенный `location @acme`,
  который можно дополнительно настроить
  с помощью директив модуля [Proxy](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#http-proxy);
- запросов к Docker API в модуле [Docker](https://angie.software//angie/docs/configuration/modules/http/http_docker.md#http-docker)
  через предопределенные `location @docker_events`
  и `@docker_containers`,
  которые можно дополнительно настроить
  с помощью директив модуля [Proxy](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#http-proxy);
- проверки состояния проксируемых серверов
  через [upstream_probe (PRO)](https://angie.software//angie/docs/configuration/modules/http/http_upstream_probe.md#u-upstream-probe);
- режима [sticky learn](https://angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-sticky) с `remote_action`
  в потоковом модуле [Upstream](https://angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#stream-upstream).

Поддержка нескольких блоков `client`
позволяет группировать общие настройки для нескольких блоков `location`
внутри каждого блока,
что помогает избежать дублирования конфигурации.

При этом директивы, указанные в каждом блоке `client`,
наследуются только явно объявленными внутри него блоками `location`.
В частности, поэтому они не влияют на конфигурацию других модулей,
которые неявно используют блок `client` для исходящих запросов
(например, [ACME](https://angie.software//angie/docs/configuration/modules/http/http_acme.md#http-acme) или [Docker](https://angie.software//angie/docs/configuration/modules/http/http_docker.md#http-docker)).

Пример использования нескольких блоков `client`
с наследованием настроек:

```nginx
client {

    proxy_set_header Host docker.example.com;
    proxy_set_header Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";

    location @docker_events {

    }

    location @docker_containers {

    }
}

client {

    proxy_method GET;
    proxy_set_header Host backend.example.com;
    proxy_set_header X-Real-IP $remote_addr;

    location @health_check {

        proxy_pass http://upstream-server/health;
    }
}
```

#### NOTE
Здесь допускаются те же директивы,
что и в обычных `location`,
однако реально работают только обработчики контента
(например, [js_content](https://angie.software//angie/docs/installation/external-modules/http_js.md#js-content) или [autoindex](https://angie.software//angie/docs/configuration/modules/http/http_autoindex.md#id3))
и переменных (например, [map](https://angie.software//angie/docs/configuration/modules/http/http_map.md#id3)),
а также директивы, которые сами порождают запросы,
например `upstream_probe`.

Директивы, работающие на других
[стадиях обработки запроса](https://angie.software//angie/docs/configuration/processing.md#http-sessions)
(например, [limit_req](https://angie.software//angie/docs/configuration/modules/http/http_api.md#limit-req), [auth_request](https://angie.software//angie/docs/configuration/modules/http/http_auth_request.md#id3),
[try_files](#try-files), фильтры изображений, XSLT и т. д.),
здесь не работают.

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

<a id="client-body-buffer-size"></a>

### client_body_buffer_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_body_buffer_size` размер;   |
|------------------------------------------------------------------------------------------|-------------------------------------|
| По умолчанию                                                                             | `client_body_buffer_size 8k|16k;`   |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location              |

Задает размер буфера для чтения тела запроса клиента. Если тело запроса больше заданного буфера, то все тело запроса или только его часть записывается [во временный файл](#client-body-temp-path). По умолчанию размер одного буфера равен двум размерам страницы. На x86, других 32-битных платформах и x86-64 это 8K. На других 64-битных платформах это обычно 16K.

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

<a id="client-body-in-file-only"></a>

### client_body_in_file_only

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_body_in_file_only` `on` | `clean` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------------------------------|
| По умолчанию                                                                             | `client_body_in_file_only off;`                      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                               |

Определяет, сохранять ли все тело запроса клиента в файл. Директиву можно использовать для отладки и при использовании переменной [$request_body_file](#v-request-body-file) или метода [$r->request_body_file](https://angie.software//angie/docs/configuration/modules/http/http_perl.md#p-r-request-body-file) модуля [Perl](https://angie.software//angie/docs/configuration/modules/http/http_perl.md#http-perl).

| `on`    | временные файлы по окончании обработки запроса не удаляются                  |
|---------|------------------------------------------------------------------------------|
| `clean` | разрешает удалять временные файлы, оставшиеся по окончании обработки запроса |

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

<a id="client-body-in-single-buffer"></a>

### client_body_in_single_buffer

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_body_in_single_buffer` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------------------------|
| По умолчанию                                                                             | `client_body_in_single_buffer off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                         |

Определяет, сохранять ли все тело запроса клиента в одном буфере. Директива рекомендуется при использовании переменной [$request_body](#v-request-body) для уменьшения требуемого числа операций копирования.

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

<a id="client-body-temp-path"></a>

### client_body_temp_path

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_body_temp_path` путь [уровень1 [уровень2 [уровень3]]];                                                                                                                          |
|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| По умолчанию                                                                             | `client_body_temp_path client_body_temp;`<br/>(путь зависит от [параметра сборки](https://angie.software//angie/docs/installation/sourcebuild.md#paths) `--http-client-body-temp-path`) |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                                                                                                                                                                  |

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

```nginx
client_body_temp_path /spool/angie/client_temp 1 2;
```

путь к временному файлу будет следующего вида:

```nginx
/spool/angie/client_temp/7/45/00000123457
```

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

<a id="client-body-timeout"></a>

### client_body_timeout

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_body_timeout` время;   |
|------------------------------------------------------------------------------------------|--------------------------------|
| По умолчанию                                                                             | `client_body_timeout 60s;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location         |

Задает таймаут при чтении тела запроса клиента. Таймаут устанавливается не на всю передачу тела запроса, а только между двумя последовательными операциями чтения. Если по истечении этого времени клиент ничего не передаст, обработка запроса прекращается с ошибкой 408 (Request Time-out).

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

<a id="client-header-buffer-size"></a>

### client_header_buffer_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_header_buffer_size` размер;   |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `client_header_buffer_size 1k;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                          |

Задает размер буфера для чтения заголовка запроса клиента. Для большинства запросов достаточно буфера размером в 1K байт. Однако если в запросе есть длинные cookies, или же запрос пришел от WAP-клиента, то он может не поместиться в 1K. Поэтому, если строка запроса или поле заголовка запроса не помещаются полностью в этот буфер, то выделяются буферы большего размера, задаваемые директивой [large_client_header_buffers](#large-client-header-buffers).

Если директива указана на уровне [server](#server), то может использоваться значение из сервера по умолчанию. Подробнее см. в разделе [Выбор виртуального сервера](https://angie.software//angie/docs/configuration/processing.md#request-processing).

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

<a id="client-header-timeout"></a>

### client_header_timeout

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_header_timeout` время;   |
|------------------------------------------------------------------------------------------|----------------------------------|
| По умолчанию                                                                             | `client_header_timeout 60s;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                     |

Задает таймаут при чтении заголовка запроса клиента. Если по истечении этого времени клиент не передаст полностью заголовок, обработка запроса прекращается с ошибкой 408 (Request Time-out).

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

<a id="client-max-body-size"></a>

### client_max_body_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `client_max_body_size` размер;   |
|------------------------------------------------------------------------------------------|----------------------------------|
| По умолчанию                                                                             | `client_max_body_size 1m;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location           |

Задает максимально допустимый размер тела запроса клиента. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку.

| `0`   | отключает проверку размера тела запроса клиента   |
|-------|---------------------------------------------------|

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

<a id="connection-pool-size"></a>

### connection_pool_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `connection_pool_size` размер;      |
|------------------------------------------------------------------------------------------|-------------------------------------|
| По умолчанию                                                                             | `connection_pool_size 256` | `512;` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location              |

Позволяет производить точную настройку выделения памяти под конкретные соединения. Эта директива не оказывает существенного влияния на производительность, и ее не следует использовать. По умолчанию:

| `256` (байт)   | на 32-битных платформах   |
|----------------|---------------------------|
| `512` (байт)   | на 64-битных платформах   |

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

<a id="default-type"></a>

### default_type

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `default_type` mime-тип;   |
|------------------------------------------------------------------------------------------|----------------------------|
| По умолчанию                                                                             | `default_type text/plain;` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location     |

Задает MIME-тип ответов по умолчанию. Соответствие расширений имен файлов MIME-типу ответов задается с помощью директивы [types](#types).

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

<a id="directio"></a>

### directio

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `directio` размер | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------|
| По умолчанию                                                                             | `directio off;`              |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location       |

Разрешает использовать флаги `O_DIRECT` (FreeBSD, Linux), `F_NOCACHE` (macOS) или функцию `directio()` (Solaris) при чтении файлов, размер которых больше либо равен указанному. Директива автоматически запрещает использование [sendfile](#sendfile) для данного запроса. Рекомендуется использовать для больших файлов:

```nginx
directio 4m;
```

или при использовании [aio](#aio) в Linux.

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

<a id="directio-alignment"></a>

### directio_alignment

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `directio_alignment` размер;   |
|------------------------------------------------------------------------------------------|--------------------------------|
| По умолчанию                                                                             | `directio_alignment 512;`      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location         |

Устанавливает выравнивание для [directio](#directio). В большинстве случаев достаточно 512-байтового выравнивания, однако при использовании XFS под Linux его нужно увеличить до 4K.

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

<a id="disable-symlinks"></a>

### disable_symlinks

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `disable_symlinks` `off`;<br/><br/>`disable_symlinks` `on` | `if_not_owner` [`from=`часть];   |
|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| По умолчанию                                                                             | `disable_symlinks off;`                                                                       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                                                                        |

Определяет, как следует поступать с символическими ссылками при открытии файлов:

| `off`          | Символические ссылки в пути допускаются и не проверяются. Это стандартное поведение.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `on`           | Если любой компонент пути является символической ссылкой, доступ к файлу запрещается.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `if_not_owner` | Доступ к файлу запрещается, если любой компонент пути является символической ссылкой, а ссылка и объект, на который она ссылается, имеют разных владельцев.                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `from=`часть   | При проверке символических ссылок (параметры `on` и `if_not_owner`) обычно проверяются все компоненты пути. Можно не проверять символические ссылки в начальной части пути, указав дополнительно параметр `from=часть`. В этом случае символические ссылки проверяются лишь начиная с компонента пути, который следует за заданной начальной частью. Если значение не является начальной частью проверяемого пути, путь проверяется целиком, как если бы этот параметр не был указан вовсе. Если значение целиком совпадает с именем файла, символические ссылки не проверяются. В значении параметра можно использовать переменные. |

Пример:

```nginx
disable_symlinks on from=$document_root;
```

Эта директива доступна только на системах, в которых есть интерфейсы `openat()` и `fstatat()`. К таким системам относятся современные версии FreeBSD, Linux и Solaris.

#### WARNING
Параметры `on` и `if_not_owner` требуют дополнительных затрат на обработку.

На системах, не поддерживающих операцию открытия каталогов только для поиска, для использования этих параметров требуется, чтобы рабочие процессы имели право читать все проверяемые каталоги.

#### NOTE
Модули [AutoIndex](https://angie.software//angie/docs/configuration/modules/http/http_autoindex.md#http-autoindex), [Random Index](https://angie.software//angie/docs/configuration/modules/http/http_random_index.md#http-random-index) и [DAV](https://angie.software//angie/docs/configuration/modules/http/http_dav.md#http-dav) в настоящий момент игнорируют эту директиву.

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

<a id="early-hints"></a>

### early_hints

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `early_hints` строка ...;   |
|------------------------------------------------------------------------------------------|-----------------------------|
| По умолчанию                                                                             | —                           |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location      |

Задаёт условия, при которых ответ с кодом "103 Early Hints" будет передан клиенту. Такой ответ может быть возвращен проксируемыми и gRPC-бэкендами. Если значение хотя бы одного из строковых параметров непустое и не равно `0`, то ответ будет передан:

```nginx
map $http_sec_fetch_mode $early_hints {
    navigate $http2$http3;
}

server {
    ...
    location / {
        early_hints $early_hints;
        proxy_pass http://example.com;
    }
}
```

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

<a id="error-page"></a>

### error_page

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `error_page` код ... [=[ответ]] uri;   |
|------------------------------------------------------------------------------------------|----------------------------------------|
| По умолчанию                                                                             | —                                      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location  |

Задает URI, который будет показываться для указанных ошибок. В значении uri можно использовать переменные.

Пример:

```nginx
error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;
```

При этом делается внутреннее перенаправление на указанный uri, а метод запроса клиента меняется на "GET" (для всех методов, отличных от "GET" и "HEAD").

Кроме того, можно поменять код ответа на другой, используя синтаксис вида `=ответ`, например:

```nginx
error_page 404 =200 /empty.gif;
```

Если ошибочный ответ обрабатывается проксированным сервером или FastCGI/uwsgi/SCGI/gRPC-сервером, и этот сервер может вернуть разные коды ответов, например, 200, 302, 401 или 404, то можно выдавать возвращаемый им код:

```nginx
error_page 404 = /404.php;
```

Если при внутреннем перенаправлении не нужно менять URI и метод, то можно передать обработку ошибки в именованный `location`:

```nginx
location / {
  error_page 404 = @fallback;
}

location @fallback {
  proxy_pass http://backend;
}
```

#### NOTE
Если при обработке uri происходит ошибка, клиенту возвращается ответ с кодом последней случившейся ошибки.

Также существует возможность использовать перенаправления URL для обработки ошибок:

```nginx
error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
```

В этом случае по умолчанию клиенту возвращается код ответа 302. Его можно изменить только на один из кодов ответа, относящихся к перенаправлениям (301, 302, 303, 307 и 308).

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

<a id="etag"></a>

### etag

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `etag` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------|
| По умолчанию                                                                             | `etag on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location |

Разрешает или запрещает автоматическую генерацию поля `ETag` заголовка ответа для статических ресурсов.

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

<a id="d-http"></a>

### http

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `http` { ... }   |
|------------------------------------------------------------------------------------------|------------------|
| По умолчанию                                                                             | —                |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | main             |

Предоставляет контекст конфигурационного файла, в котором указываются директивы HTTP-сервера.

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

<a id="if-modified-since"></a>

### if_modified_since

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `if_modified_since` `off` | `exact` | `before`;   |
|------------------------------------------------------------------------------------------|---------------------------------------------------|
| По умолчанию                                                                             | `if_modified_since exact;`                        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                            |

Определяет, как сравнивать время модификации ответа с временем в поле `If-Modified-Since`  заголовка запроса:

| `off`    | ответ всегда считается изменившимся                                                                        |
|----------|------------------------------------------------------------------------------------------------------------|
| `exact`  | точное совпадение                                                                                          |
| `before` | время модификации ответа меньше или равно времени, заданному в поле `If-Modified-Since`  заголовка запроса |

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

<a id="ignore-invalid-headers"></a>

### ignore_invalid_headers

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `ignore_invalid_headers` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------------------|
| По умолчанию                                                                             | `ignore_invalid_headers on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                             |

Если включено, Angie игнорирует поля заголовка с недопустимыми именами. Допустимыми считаются имена, состоящие из английских букв, цифр, дефисов и возможно знаков подчеркивания (последнее контролируется директивой [underscores_in_headers](#underscores-in-headers)).

Если директива указана на уровне [server](#server), то может использоваться значение из сервера по умолчанию.

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

<a id="internal"></a>

### internal

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `internal;`   |
|------------------------------------------------------------------------------------------|---------------|
| По умолчанию                                                                             | —             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | location      |

Указывает, что `location` может использоваться только для внутренних
запросов. Для внешних запросов будет возвращаться ошибка 404 (Not Found) в
контексте данного `location`, что позволяет перенаправить такие запросы с
помощью [error_page](#error-page). Внутренними запросами являются:

* запросы, перенаправленные директивами [error_page](#error-page),
  [index](https://angie.software//angie/docs/configuration/modules/http/http_index.md#id3), [random_index](https://angie.software//angie/docs/configuration/modules/http/http_random_index.md#id3) и [try_files](#try-files);
* запросы, перенаправленные с помощью поля `X-Accel-Redirect` заголовка
  ответа вышестоящего сервера;
* подзапросы, формируемые командой `include virtual` модуля [SSI](https://angie.software//angie/docs/configuration/modules/http/http_ssi.md#http-ssi), директивами модуля [Addition](https://angie.software//angie/docs/configuration/modules/http/http_addition.md#http-addition),
  а также директивами [auth_request](https://angie.software//angie/docs/configuration/modules/http/http_auth_request.md#id3) и [mirror](https://angie.software//angie/docs/configuration/modules/http/http_mirror.md#id3);
* запросы, измененные директивой [rewrite](https://angie.software//angie/docs/configuration/modules/http/http_rewrite.md#id5).

Пример:

```nginx
error_page 404 /404.html;

location = /404.html {

    internal;
}
```

Благодаря тому, что ошибка 404 возвращается в контексте `location` с
директивой `internal`, можно перенаправлять внешние запросы в другое
место. Это позволяет использовать один префикс как для внешнего, так и для
внутреннего запроса, но с разной обработкой, например:

```nginx
location /path {

    internal;
    error_page 404 =@external;

    proxy_pass https://internal;
}

location @external {

    proxy_pass https://external;
}
```

Здесь внешний запрос `GET /path` будет проксирован на
`https://external/path`, а такой же внутренний запрос будет проксирован на
`https://internal/path`.

#### NOTE
Для предотвращения зацикливания, которое может возникнуть при использовании
некорректных конфигураций, количество внутренних перенаправлений ограничено
десятью. По достижении этого ограничения будет возвращена ошибка 500
(Internal Server Error). В таком случае в лог-файле ошибок можно увидеть
сообщение `rewrite or internal redirection cycle`.

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

<a id="keepalive-disable"></a>

### keepalive_disable

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `keepalive_disable` `none` | браузер ...;   |
|------------------------------------------------------------------------------------------|---------------------------------------------|
| По умолчанию                                                                             | `keepalive_disable msie6;`                  |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                      |

Запрещает соединения keep-alive с некорректно ведущими себя браузерами. Параметры браузер указывают, на какие браузеры это распространяется.

| `none`   | разрешает соединения keep-alive со всеми браузерами                                          |
|----------|----------------------------------------------------------------------------------------------|
| `msie6`  | запрещает соединения keep-alive со старыми версиями MSIE после получения запроса POST        |
| `safari` | запрещает соединения keep-alive с Safari и подобными им браузерами на macOS и подобных ей ОС |

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

<a id="keepalive-requests"></a>

### keepalive_requests

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `keepalive_requests` число;   |
|------------------------------------------------------------------------------------------|-------------------------------|
| По умолчанию                                                                             | `keepalive_requests 1000;`    |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location        |

Задает максимальное число запросов, которые можно сделать по одному keep-alive соединению. После того, как сделано максимальное число запросов, соединение закрывается.

Периодическое закрытие соединений необходимо для освобождения памяти, выделенной под конкретные соединения. Поэтому использование слишком большого максимального числа запросов может приводить к чрезмерному потреблению памяти и не рекомендуется.

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

<a id="keepalive-time"></a>

### keepalive_time

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `keepalive_time` время;   |
|------------------------------------------------------------------------------------------|---------------------------|
| По умолчанию                                                                             | `keepalive_time 1h;`      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location    |

Ограничивает максимальное время, в течение которого могут обрабатываться запросы в рамках соединения keep-alive. По достижении заданного времени соединение закрывается после обработки очередного запроса.

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

<a id="keepalive-timeout"></a>

### keepalive_timeout

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `keepalive_timeout` таймаут [заголовок_таймаута];   |
|------------------------------------------------------------------------------------------|-----------------------------------------------------|
| По умолчанию                                                                             | `keepalive_timeout 75s;`                            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                              |

| таймаут   | задает время, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера   |
|-----------|---------------------------------------------------------------------------------------------------------|
| `0`       | запрещает keep-alive соединения с клиентами                                                             |

Второй,  *необязательный*, параметр задает значение в поле `Keep‑Alive: timeout=время`  заголовка ответа. Два параметра могут отличаться друг от друга.

Поле `Keep-Alive: timeout=время`  заголовка понимают Mozilla и Konqueror. MSIE сам закрывает keep-alive соединение примерно через 60 секунд.

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

<a id="large-client-header-buffers"></a>

### large_client_header_buffers

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `large_client_header_buffers` количество размер;   |
|------------------------------------------------------------------------------------------|----------------------------------------------------|
| По умолчанию                                                                             | `large_client_header_buffers 4 8k;`                |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                                       |

Задает максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса не должна превышать размера одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не должно превышать размера одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request). Буферы выделяются только по мере необходимости. По умолчанию размер одного буфера равен 8K байт. Если по окончании обработки запроса соединение переходит в состояние keep-alive, эти буферы освобождаются.

Если директива указана на уровне [server](#server), то может использоваться значение из сервера по умолчанию.

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

<a id="limit-except"></a>

### limit_except

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_except` метод1 [метод2...] { ... };   |
|------------------------------------------------------------------------------------------|----------------------------------------------|
| По умолчанию                                                                             | —                                            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | location                                     |

Ограничивает HTTP-методы, доступные внутри location. Параметр метод может быть
одним из `GET`, `HEAD`, `POST`, `PUT`, `DELETE`,
`MKCOL`, `COPY`, `MOVE`, `OPTIONS`, `PROPFIND`,
`PROPPATCH`, `LOCK`, `UNLOCK` или `PATCH`. Если разрешен
метод `GET`, то метод `HEAD` также будет разрешен. Доступ к
остальным методам может быть ограничен при помощи директив модулей [Access](https://angie.software//angie/docs/configuration/modules/http/http_access.md#http-access) и [Auth Basic](https://angie.software//angie/docs/configuration/modules/http/http_auth_basic.md#http-auth-basic).

```nginx
limit_except GET {
  allow 192.168.1.0/32;
  deny  all;
}
```

#### NOTE
Ограничение в примере действует для всех методов,
**кроме** `GET` и `HEAD`.

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

<a id="limit-rate"></a>

### limit_rate

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_rate` скорость;                |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `limit_rate 0;`                       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Ограничивает скорость передачи ответа клиенту. Скорость задается в байтах в секунду. Значение `0` отключает ограничение скорости. Ограничение устанавливается на запрос, поэтому, если клиент одновременно откроет два соединения, суммарная скорость будет вдвое выше заданного ограничения.

В значении параметра можно использовать переменные. Это может быть полезно в случаях, когда скорость нужно ограничивать в зависимости от какого-либо условия:

```nginx
map $slow $rate {
  1     4k;
  2     8k;
}

limit_rate $rate;
```

Ограничение скорости можно также задать в переменной [$limit_rate](#v-limit-rate), однако использовать данный метод не рекомендуется:

```nginx
server {

  if ($slow) {
    set $limit_rate 4k;
  }

}
```

Кроме того, ограничение скорости может быть задано в поле `X-Accel-Limit-Rate` заголовка ответа проксированного сервера. Эту возможность можно запретить с помощью директив [proxy_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-ignore-headers), [fastcgi_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#fastcgi-ignore-headers), [uwsgi_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-ignore-headers) и [scgi_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_scgi.md#scgi-ignore-headers).

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

<a id="limit-rate-after"></a>

### limit_rate_after

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_rate_after` размер;            |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `limit_rate_after 0;`                 |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Задает начальный объем данных, после передачи которого начинает ограничиваться скорость передачи ответа клиенту. В значении параметра можно использовать переменные.

Пример:

```nginx
location /flv/ {
 flv;
 limit_rate_after 500k;
 limit_rate       50k;
}
```

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

<a id="lingering-close"></a>

### lingering_close

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `lingering_close` `on` | `always` | `off`;   |
|------------------------------------------------------------------------------------------|----------------------------------------------|
| По умолчанию                                                                             | `lingering_close on;`                        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                       |

Управляет закрытием соединений с клиентами.

| `on`     | Angie будет [ждать](#lingering-timeout) и [обрабатывать](#lingering-time) дополнительные данные, поступающие от клиента, перед полным закрытием соединения, но только если эвристика указывает на то, что клиент может еще послать данные.   |
|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `always` | Angie всегда будет ждать и обрабатывать дополнительные данные, поступающие от клиента.                                                                                                                                                       |
| `off`    | Angie не будет ждать поступления дополнительных данных и сразу же закроет соединение. Это поведение нарушает протокол и поэтому не должно использоваться без необходимости.                                                                  |

Для управления закрытием HTTP/2-соединений директива должна быть задана на уровне [server](#server).

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

<a id="lingering-time"></a>

### lingering_time

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `lingering_time` время;   |
|------------------------------------------------------------------------------------------|---------------------------|
| По умолчанию                                                                             | `lingering_time 30s;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location    |

Если действует [lingering_close](#lingering-close), эта директива задает максимальное время, в течение которого Angie будет обрабатывать (читать и игнорировать) дополнительные данные, поступающие от клиента. По прошествии этого времени соединение будет закрыто, даже если будут еще данные.

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

<a id="lingering-timeout"></a>

### lingering_timeout

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `lingering_timeout` время;   |
|------------------------------------------------------------------------------------------|------------------------------|
| По умолчанию                                                                             | `lingering_timeout 5s;`      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location       |

Если действует [lingering_close](#lingering-close), эта директива задает максимальное время
ожидания поступления дополнительных данных от клиента. Если в течение этого
времени данные не были получены, соединение закрывается. В противном случае
данные читаются и игнорируются, и Angie снова ждет поступления данных. Цикл
"ждать-читать-игнорировать" повторяется, но не дольше чем задано директивой
[lingering_time](#lingering-time).

При постепенном завершении клиентские постоянные соединения закрываются только в
случае, если они неактивны не менее времени, заданного в
`lingering_timeout`.

#### NOTE
В nginx аналогичная директива называется [keepalive_min_timeout](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_min_timeout).

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

<a id="listen"></a>

### listen

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `listen` адрес[:порт] [`default_server`] [`ssl`] [http2 | `quic`] [`proxy_protocol`] [`setfib=`число] [`fastopen=`число] [`backlog=`число] [`rcvbuf=`размер] [`sndbuf=`размер] [`accept_filter=`фильтр] [`deferred`] [`bind`] [`ipv6only=``on` | `off`] [`reuseport`] [`so_keepalive=`on|off|[`keepidle`]:[`keepintvl`]:[`keepcnt`]];<br/><br/>`listen` порт [`default_server`] [`ssl`] [http2 | `quic`] [`proxy_protocol`] [`setfib=`число] [`fastopen=`число] [`backlog=`число] [`rcvbuf=`размер] [`sndbuf=`размер] [`accept_filter=`фильтр] [`deferred`] [`bind`] [`ipv6only=``on` | `off`] [`reuseport`] [`so_keepalive=`on|off|[`keepidle`]:[`keepintvl`]:[`keepcnt`]];<br/><br/>`listen` unix:путь [`default_server`] [`ssl`] [http2 | `quic`] [`proxy_protocol`] [`backlog=`число] [`rcvbuf=`размер] [`sndbuf=`размер] [`accept_filter=`фильтр] [`deferred`] [`bind`] [`so_keepalive=`on|off|[`keepidle`]:[`keepintvl`]:[`keepcnt`]];   |
|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| По умолчанию                                                                             | `listen *:80` | `*:8000;`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | server                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |

Задает адрес и порт для прослушивающего сокета или путь к UNIX-доменному
сокету, на котором сервер будет принимать запросы.
Адрес также может быть именем хоста, например:

```nginx
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
```

IPv6-адреса указываются в квадратных скобках:

```nginx
listen [::]:8000;
listen [::1];
```

UNIX-доменные сокеты задаются с префиксом `unix:`:

```nginx
listen unix:/var/run/angie.sock;
```

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

- Если указан только адрес, используется порт 80.
- Если указан только порт,
  Angie будет слушать на всех доступных интерфейсах IPv4 (и IPv6, если включен).
  Стоящий первым блок `server` на этом порту будет сервером по умолчанию
  для запросов с несопоставленным заголовком `Host`.
- Если директива не указана вовсе, Angie использует `*:80`,
  если запущен с правами суперпользователя,
  или `*:8000` в противном случае.

| `default_server`   | сервер, в котором указан этот параметр,<br/>будет сервером по умолчанию для указанной пары адрес:порт<br/>(вместе они образуют *cлушающий сокет*).<br/><br/>Если же директив с параметром `default_server` нет,<br/>сервером по умолчанию для слущающего сокета<br/>будет первый в конфигурации сервер, обслуживающий этот сокет.                                                                   |
|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `ssl`              | указывает на то, что все соединения, принимаемые на данном слушающем сокете, должны работать в режиме SSL. Это позволяет задать [компактную конфигурацию](https://angie.software//angie/docs/configuration/ssl.md#compact-server) для сервера, работающего сразу в двух режимах — HTTP и HTTPS.                                                                                                     |
| `http2`            | позволяет принимать на слушающем сокете HTTP/2-соединения. Обычно, чтобы это работало, следует также указать параметр `ssl`, однако Angie можно также настроить и на прием HTTP/2-соединений без SSL.<br/><br/>#### Deprecated<br/>Устарело, начиная с версии 1.2.0.<br/><br/>Используйте взамен директиву [http2](https://angie.software//angie/docs/configuration/modules/http/http_v2.md#http2). |
| `quic`             | позволяет принимать на этом порту QUIC-соединения.<br/>Для использования этой опции в Angie<br/>должен быть включен и настроен модуль [HTTP3](https://angie.software//angie/docs/configuration/modules/http/http_v3.md#http-v3).<br/>Когда `quic` включен,<br/>также можно указать `reuseport`,<br/>чтобы использовать несколько рабочих процессов.                                                 |
| `proxy_protocol`   | указывает на то, что все соединения, принимаемые на данном слушающем сокете, должны использовать протокол PROXY.                                                                                                                                                                                                                                                                                    |

В директиве `listen` можно также указать несколько дополнительных
параметров, специфичных для связанных с сокетами системных вызовов. Следующие
параметры можно задать в любой директиве `listen`, но только один раз для
каждого слушающего сокета:

| `setfib=`число         | задает таблицу маршрутизации, FIB (параметр `SO_SETFIB`) для слушающего сокета. В настоящий момент это работает только на FreeBSD.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `fastopen=`число       | включает "TCP Fast Open" для слушающего сокета и ограничивает максимальную длину очереди соединений, которые еще не завершили процесс трехстороннего рукопожатия.<br/><br/>#### WARNING<br/>Не включайте "TCP Fast Open", не убедившись, что сервер может адекватно обрабатывать многократное получение одного и того же SYN-пакета с данными.                                                                                                                                                                                                                                                                                                                                                    |
| `backlog=`число        | задает параметр `backlog` в вызове `listen()`, который ограничивает максимальный размер очереди ожидающих приема соединений. По умолчанию `backlog` устанавливается равным -1 для FreeBSD, DragonFly BSD и macOS, и 511 для других платформ.                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `rcvbuf=`размер        | задает размер буфера приема (параметр `SO_RCVBUF`) для слушающего сокета.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `sndbuf=`размер        | задает размер буфера передачи (параметр `SO_SNDBUF`) для слушающего сокета.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `accept_filter=`фильтр | задает название accept-фильтра (параметр `SO_ACCEPTFILTER`) для слушающего сокета, который включается для фильтрации входящих соединений перед передачей их в `accept()`. Работает только на FreeBSD и NetBSD 5.0+. Можно использовать два фильтра: `dataready` и `httpready`.                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `deferred`             | указывает использовать отложенный `accept()` (параметр `TCP_DEFER_ACCEPT` сокета) на Linux.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `bind`                 | указывает, что для данного слушающего сокета нужно делать `bind()` отдельно. Это нужно потому, что если описаны несколько директив `listen` с одинаковым портом, но разными адресами, и одна из директив `listen` слушает на всех адресах для данного порта (`*:порт`), то Angie сделает `bind()` только на `*:порт`. Необходимо заметить, что в этом случае для определения адреса, на который пришло соединение, делается системный вызов `getsockname()`. Если же используются параметры `setfib`, `fastopen`, `backlog`, `rcvbuf`, `sndbuf`, `accept_filter`, `deferred`, `ipv6only`, `reuseport` или `so_keepalive`, то для данной пары адрес:порт всегда делается отдельный вызов `bind()`. |
| `ipv6only=on` | `off`  | определяет (через параметр сокета `IPV6_V6ONLY`), будет ли слушающий на wildcard-адресе [::] IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения.<br/><br/>По умолчанию параметр включен. Установить его можно только один раз на старте.                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `reuseport`            | указывает, что нужно создавать отдельный слушающий сокет для каждого рабочего процесса (через параметр сокета `SO_REUSEPORT` для Linux 3.9+ и DragonFly BSD или `SO_REUSEPORT_LB` для FreeBSD 12+), позволяя ядру распределять входящие соединения между рабочими процессами. В настоящий момент это работает только на Linux 3.9+, DragonFly BSD и FreeBSD 12+.<br/><br/>#### WARNING<br/>Ненадлежащее использование параметра `reuseport`<br/>может быть небезопасно.                                                                                                                                                                                                                           |
| `multipath`            | включает прием соединений по протоколу [Multipath TCP](https://en.wikipedia.org/wiki/Multipath_TCP) (MPTCP),<br/>поддерживаемому в ядре Linux с версии 5.6.<br/>Параметр **несовместим** с `quic`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |

`so_keepalive=on` | `off` | [`keepidle`]:[`keepintvl`]:[`keepcnt`]

Конфигурирует для слушающего сокета поведение "TCP keepalive".

| `''`   | если параметр опущен, для сокета будут действовать настройки операционной системы   |
|--------|-------------------------------------------------------------------------------------|
| `on`   | для сокета включается параметр `SO_KEEPALIVE`                                       |
| `off`  | для сокета параметр `SO_KEEPALIVE` выключается                                      |

Некоторые операционные системы поддерживают настройку параметров "TCP keepalive" на уровне сокета посредством параметров `TCP_KEEPIDLE`, `TCP_KEEPINTVL` и `TCP_KEEPCNT`. На таких системах (в настоящее время это Linux, NetBSD, Dragonfly, FreeBSD и macOS) их можно сконфигурировать с помощью параметров `keepidle`, `keepintvl` и `keepcnt`. Один или два параметра могут быть опущены, в таком случае для соответствующего параметра сокета будут действовать стандартные системные настройки. Например,

```nginx
so_keepalive=30m::10
```

установит таймаут бездействия (`TCP_KEEPIDLE`) в 30 минут, для интервала проб (`TCP_KEEPINTVL`) будет действовать стандартная системная настройка, а счетчик проб (`TCP_KEEPCNT`) будет равен 10.

Пример:

```nginx
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
```

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

<a id="location"></a>

### location

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `location` ([ = | ~ | ~\* | ^~ ] uri | `@имя`)+ { ... }   |
|------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| По умолчанию                                                                             | —                                                         |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | server, location                                          |

Устанавливает конфигурацию в зависимости от того, соответствует ли URI запроса
какому-либо из выражений сопоставления.

Для сопоставления используется URI запроса в нормализованном виде, после
декодирования текста, заданного в виде `%XX`, преобразования относительных
элементов пути "." и ".." в реальные и возможной [замены](#merge-slashes)
двух и более подряд идущих косых черт на одну.

Задать `location` можно префиксной строкой или регулярным выражением.

Регулярные выражения задаются с модификатором:

| `~*`   | Для поиска совпадения без учета регистра символов   |
|--------|-----------------------------------------------------|
| `~`    | С учетом регистра                                   |

Чтобы найти `location`, соответствующий запросу, вначале проверяются
`location`'ы, заданные префиксными строками (префиксные `location`'ы). Среди
них ищется `location` с совпадающим префиксом максимальной длины и
запоминается.

#### NOTE
Для операционных систем, нечувствительных к регистру символов, таких как
macOS, сравнение с префиксными строками производится без учета регистра.
Однако сравнение ограничено только однобайтными `locale`'ями.

Затем проверяются регулярные выражения в порядке их следования в
конфигурационном файле. Проверка регулярных выражений прекращается после
первого же совпадения, и используется соответствующая конфигурация. Если
совпадение с регулярным выражением не найдено, то используется конфигурация
запомненного ранее префиксного `location`'а.

За некоторыми исключениями, о которых говорится ниже,
блоки `location` могут быть вложенными.

Регулярные выражения могут создавать группы захвата, которые затем можно
использовать в других директивах.

Если у совпавшего префиксного `location`'а указан модификатор `^~`,
то регулярные выражения не проверяются.

Кроме того, с помощью модификатора `=` можно задать точное совпадение URI и
`location`. При точном совпадении поиск сразу же прекращается. Например, если
запрос `/` случается часто, можно ускорить обработку таких запросов, указав
`location =/`, так как поиск прекратится после первого же сравнения.  Такой
`location` не может иметь вложенные `location`, так как он задает полное
совпадение.

Пример:

```nginx
location =/ {
   #конфигурация А
}

location / {
   #конфигурация Б
}

location /documents/ {
   #конфигурация В
}

location ^~/images/ {
   #конфигурация Г
}

location ~*\.(gif|jpg|jpeg)$ {
   #конфигурация Д
}
```

- Для запроса `/` будет выбрана конфигурация А,
- для запроса `/index.html` — конфигурация Б,
- для запроса `/documents/document.html` — конфигурация В,
- для запроса `/images/1.gif` — конфигурация Г,
- а для запроса `/documents/1.jpg` — конфигурация Д.

<a id="location-redirect"></a>

#### NOTE
Если префиксный `location` задан с косой чертой в конце
и включена директива [auto_redirect](#auto-redirect), происходит следующее:
На запрос с URI без косой черты в конце, в остальном совпадающий с префиксом,
будет возвращено постоянное перенаправление с кодом 301, указывающее
на URI запроса с добавленной в конце косой чертой.

Если задать `location` с точным совпадением URI,
перенаправление не используется:

```nginx
location /user/ {
  proxy_pass http://user.example.com;
}

location =/user {
  proxy_pass http://login.example.com;
}
```

<a id="named-location"></a>

Префикс `@` задает  *именованный* `location`. Такой `location` не используется
при обычной обработке запросов, а предназначен только для перенаправления в
него запросов. Такие `location` не могут быть вложенными и не могут содержать
вложенные `location`.

<a id="combined-locations"></a>

#### Комбинированные `location`

Для удобства несколько `location` с одинаковой конфигурацией можно записать
компактно, перечислив в одном `location` сразу несколько выражений
сопоставления и задав для них единую конфигурацию. Такие `location` называются
 *комбинированными*.

Если, например, предположить, что в предыдущем примере конфигурации А, Г и Д
совпадают, то их можно записать с помощью комбинированного `location`:

```nginx
location =/
         ^~/images/
         ~*\.(gif|jpg|jpeg)$ {
   #общая конфигурация
}
```

Именованный `location` также может быть частью комбинированного:

```nginx
location =/
         @named_combined {
   #...
}
```

#### WARNING
В комбинированных `location` между модификатором выражения сопоставления и
самим выражением не может стоять пробел.  Правильно: `location
~*/match(ing|es|er)$  *...*`.

#### NOTE
Сейчас комбинированные `location` не могут **непосредственно** содержать
директивы `proxy_pass`, в которых задан URI, а также `api` и `alias`.
При этом такие директивы можно использовать в других `location`,
вложенных в комбинированный.

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

<a id="log-not-found"></a>

### log_not_found

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `log_not_found` `on` | `off`;   |
|------------------------------------------------------------------------------------------|---------------------------------|
| По умолчанию                                                                             | `log_not_found on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location          |

Разрешает или запрещает записывать в [error_log](https://angie.software//angie/docs/configuration/modules/core.md#error-log) ошибки о том, что файл не найден.

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

<a id="log-subrequest"></a>

### log_subrequest

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `log_subrequest` `on` | `off`;   |
|------------------------------------------------------------------------------------------|----------------------------------|
| По умолчанию                                                                             | `log_subrequest off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location           |

Разрешает или запрещает записывать в [access_log](https://angie.software//angie/docs/configuration/modules/http/http_log.md#access-log) подзапросы.

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

<a id="max-headers"></a>

### max_headers

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `max_headers` число;   |
|------------------------------------------------------------------------------------------|------------------------|
| Значение по умолчанию                                                                    | `max_headers 1000;`    |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server           |

Устанавливает максимальное количество полей заголовков запроса клиента.
При превышении предела клиенту возвращается ошибка `400 (Bad Request)`.

Если эта директива задана на уровне [server](#server),
может использоваться значение с сервера по умолчанию.
Дополнительные сведения см. в разделе [Выбор виртуального сервера](https://angie.software//angie/docs/configuration/processing.md#virtual-server-selection).

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

<a id="max-ranges"></a>

### max_ranges

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `max_ranges` число;    |
|------------------------------------------------------------------------------------------|------------------------|
| По умолчанию                                                                             | —                      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location |

Ограничивает максимальное допустимое число диапазонов в запросах с указанием диапазона запрашиваемых байт (byte-range requests). Запросы, превышающие указанное ограничение, обрабатываются как если бы они не содержали указания диапазонов. По умолчанию число диапазонов не ограничено.

| `0`   | полностью запрещает поддержку диапазонов   |
|-------|--------------------------------------------|

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

<a id="merge-slashes"></a>

### merge_slashes

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `merge_slashes` `on` | `off`;   |
|------------------------------------------------------------------------------------------|---------------------------------|
| По умолчанию                                                                             | `merge_slashes on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                    |

Разрешает или запрещает преобразование URI путем замены двух и более подряд идущих косых черт ("/") на одну.

Необходимо иметь в виду, что это преобразование необходимо для корректной проверки префиксных строк и регулярных выражений. Если его не делать, то запрос `//scripts/one.php` не попадет в

```nginx
location /scripts/ { }
```

и может быть обслужен как статический файл. Поэтому он преобразуется к виду `/scripts/one.php`.

Запрет преобразования может понадобиться, если в URI используются имена, закодированные методом `base64`, в котором задействован символ "/". Однако из соображений безопасности лучше избегать отключения преобразования.

Если директива указана на уровне [server](#server), то может использоваться значение из сервера по умолчанию.

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

<a id="msie-padding"></a>

### msie_padding

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `msie_padding` `on` | `off`;   |
|------------------------------------------------------------------------------------------|--------------------------------|
| По умолчанию                                                                             | `msie_padding on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location         |

Разрешает или запрещает добавлять в ответы для MSIE со статусом больше 400 комментарий для увеличения размера ответа до 512 байт.

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

<a id="msie-refresh"></a>

### msie_refresh

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `msie_refresh` `on` | `off`;   |
|------------------------------------------------------------------------------------------|--------------------------------|
| По умолчанию                                                                             | `msie_refresh off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location         |

Разрешает или запрещает выдавать для MSIE клиентов refresh'ы вместо перенаправлений.

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

<a id="open-file-cache"></a>

### open_file_cache

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `open_file_cache` `off`;<br/><br/>`open_file_cache` `max=``N` [`inactive=`время];   |
|------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| По умолчанию                                                                             | `open_file_cache off;`                                                              |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                                                              |

Задает кэш, в котором могут храниться:

* дескрипторы открытых файлов, информация об их размерах и времени модификации;
* информация о существовании каталогов;
* информация об ошибках поиска файла — "нет файла", "нет прав на чтение" и тому подобное.

Кэширование ошибок нужно разрешить отдельно директивой [open_file_cache_errors](#open-file-cache-errors).

| `max`      | задает максимальное число элементов в кэше; при переполнении кэша удаляются наименее востребованные элементы (LRU)                            |
|------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| `inactive` | задает время, после которого элемент кэша удаляется, если к нему не было обращений в течение этого времени.<br/><br/>По умолчанию: 60 секунд. |
| `off`      | запрещает кэш.                                                                                                                                |

Пример:

```nginx
open_file_cache          max=1000 inactive=20s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;
```

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

<a id="open-file-cache-errors"></a>

### open_file_cache_errors

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `open_file_cache_errors` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------------------|
| По умолчанию                                                                             | `open_file_cache_errors off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                   |

Разрешает или запрещает кэширование ошибок поиска файлов в [open_file_cache](#open-file-cache).

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

<a id="open-file-cache-min-uses"></a>

### open_file_cache_min_uses

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `open_file_cache_min_uses` число;   |
|------------------------------------------------------------------------------------------|-------------------------------------|
| По умолчанию                                                                             | `open_file_cache_min_uses 1;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location              |

Задает минимальное число обращений к файлу в течение времени, заданного параметром inactive директивы [open_file_cache](#open-file-cache), необходимых для того, чтобы дескриптор файла оставался открытым в кэше.

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

<a id="open-file-cache-valid"></a>

### open_file_cache_valid

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `open_file_cache_valid` время;   |
|------------------------------------------------------------------------------------------|----------------------------------|
| По умолчанию                                                                             | `open_file_cache_valid 60s;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location           |

Определяет время, через которое следует проверять актуальность информации об элементе в [open_file_cache](#open-file-cache).

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

<a id="output-buffers"></a>

### output_buffers

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `output_buffers` число размер;   |
|------------------------------------------------------------------------------------------|----------------------------------|
| По умолчанию                                                                             | `output_buffers 2 32k;`          |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location           |

Задает число и размер буферов, используемых при чтении ответа с диска.

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

<a id="port-in-redirect"></a>

### port_in_redirect

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `port_in_redirect` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------------|
| По умолчанию                                                                             | `port_in_redirect on;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location             |

Разрешает или запрещает указывать порт в [абсолютных](#absolute-redirect) перенаправлениях, выдаваемых Angie.

Использование в перенаправлениях основного имени сервера управляется директивой [server_name_in_redirect](#server-name-in-redirect).

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

<a id="postpone-output"></a>

### postpone_output

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `postpone_output` размер;   |
|------------------------------------------------------------------------------------------|-----------------------------|
| По умолчанию                                                                             | `postpone_output 1460;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location      |

Если это возможно, то отправка данных клиенту будет отложена пока Angie не накопит по крайней мере указанное количество байт для отправки.

| `0`   | запрещает отложенную отправку данных   |
|-------|----------------------------------------|

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

<a id="read-ahead"></a>

### read_ahead

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `read_ahead` размер;   |
|------------------------------------------------------------------------------------------|------------------------|
| По умолчанию                                                                             | `read_ahead 0;`        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location |

Задает ядру размер предчтения при работе с файлами.

На Linux используется системный вызов `posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)`, поэтому параметр размер там игнорируется.

На FreeBSD используется системный вызов `fcntl(O_READAHEAD,` размер ), появившийся во FreeBSD 9.0-CURRENT.

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

<a id="recursive-error-pages"></a>

### recursive_error_pages

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `recursive_error_pages` `on` | `off`;   |
|------------------------------------------------------------------------------------------|-----------------------------------------|
| По умолчанию                                                                             | `recursive_error_pages off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                  |

Разрешает или запрещает делать несколько перенаправлений через директиву [error_page](#error-page). Число таких перенаправлений [ограничено](#internal).

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

<a id="request-pool-size"></a>

### request_pool_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `request_pool_size` размер;   |
|------------------------------------------------------------------------------------------|-------------------------------|
| По умолчанию                                                                             | `request_pool_size 4k;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                  |

Позволяет производить точную настройку выделения памяти под конкретные запросы. Эта директива не оказывает существенного влияния на производительность, и ее не следует использовать.

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

<a id="reset-timedout-connection"></a>

### reset_timedout_connection

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `reset_timedout_connection` `on` | `off`;   |
|------------------------------------------------------------------------------------------|---------------------------------------------|
| По умолчанию                                                                             | `reset_timedout_connection off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                      |

Разрешает или запрещает сброс соединений по таймауту, а также при закрытии соединений с помощью нестандартного кода 444. Сброс делается следующим образом. Перед закрытием сокета для него задается параметр `SO_LINGER` с таймаутом `0`. После этого при закрытии сокета клиенту отсылается `TCP RST`, а вся память, связанная с этим сокетом, освобождается. Это позволяет избежать длительного нахождения уже закрытого сокета в состоянии `FIN_WAIT1` с заполненными буферами.

#### NOTE
соединения keep-alive по истечении таймаута закрываются обычным образом.

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

<a id="resolver"></a>

### resolver

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `resolver` адрес ... [`valid=`время] [`ipv4=``on` | `off`] [`ipv6=``on` | `off`] [`status_zone=`зона];   |
|------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
| По умолчанию                                                                             | —                                                                                                        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, upstream                                                                         |

Задает серверы DNS, используемые для преобразования имен вышестоящих серверов в адреса, например:

```nginx
resolver 127.0.0.53 [::1]:5353;
```

Адрес может быть указан в виде доменного имени или IP-адреса, и необязательного порта.
Если порт не указан, используется порт 53. Серверы DNS опрашиваются циклически.

#### NOTE
Рекомендуется использовать локальный доверенный резолвер, например
`127.0.0.53` (systemd-resolved), а не публичный (например, `8.8.8.8`).
Публичные резолверы раскрывают DNS-запросы третьим сторонам и повышают
риск атак с подменой кэша.

#### NOTE
Значение директивы наследуется вложенными блоками
и может быть переопределено в них при необходимости.
В пределах одного блока допустимо указывать директиву только один раз.
Если она повторяется, действует последнее определение.

По умолчанию Angie кэширует ответы, используя значение TTL из ответа DNS. Если
директива `resolver` не указана и не выполняются динамические DNS-запросы
(например, при использовании фиксированных имен в [Proxy](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#http-proxy) без
переменных), указание резолвера не требуется: имена будут разрешены при запуске
с помощью системного резолвера. Необязательный параметр `valid` позволяет
это переопределить:

| `valid`   |  *необязательный* параметр, позволяет переопределить срок кэширования ответа   |
|-----------|--------------------------------------------------------------------------------|
```nginx
resolver 127.0.0.53 [::1]:5353 valid=30s;
```

По умолчанию Angie будет искать как IPv4-, так и IPv6-адреса при преобразовании имен в адреса.

| `ipv4=off`   | запрещает поиск IPv4-адресов   |
|--------------|--------------------------------|
| `ipv6=off`   | запрещает поиск IPv6-адресов   |

<a id="resolver-status"></a>

| `status_zone`   |  *необязательный* параметр;<br/>включает сбор метрик запросов и ответов DNS-сервера<br/>([/status/resolvers/<зона>](https://angie.software//angie/docs/configuration/modules/http/http_api.md#api-status-resolvers))<br/>в указанной зоне   |
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

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

<a id="resolver-timeout"></a>

### resolver_timeout

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `resolver_timeout` время;        |
|------------------------------------------------------------------------------------------|----------------------------------|
| По умолчанию                                                                             | `resolver_timeout 30s;`          |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, upstream |

Задает таймаут для преобразования имени в адрес, например:

```nginx
```

resolver_timeout 5s;

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

<a id="error-log-user-tag"></a>

### error_log_user_tag

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `error_log_user_tag` значение;       |
|------------------------------------------------------------------------------------------|--------------------------------------|
| По умолчанию                                                                             | —                                    |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, limit_except |

Добавляет тег, зависящий от запроса, в записи [error_log](https://angie.software//angie/docs/configuration/modules/core.md#error-log). Значение является
[сложным значением](https://angie.software//angie/docs/configuration/configfile.md#syntax) и может содержать переменные. Директива может
задаваться несколько раз для добавления нескольких тегов. Теги используются в
фильтрах `filter=tag:` директивы [error_log](https://angie.software//angie/docs/configuration/modules/core.md#error-log).

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

<a id="root"></a>

### root

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `root` путь;                          |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `root html;`                          |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Задает корневой каталог для запросов. Например, при такой конфигурации

```nginx
location /i/ {
  root /data/w3;
}
```

в ответ на запрос `/i/top.gif` будет отдан файл `/data/w3/i/top.gif`.

В значении параметра путь можно использовать переменные, кроме [$document_root](#v-document-root) и [$realpath_root](#v-realpath-root).

Путь к файлу формируется путем простого добавления URI к значению директивы root. Если же URI необходимо поменять, следует воспользоваться директивой [alias](#alias).

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

<a id="satisfy"></a>

### satisfy

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `satisfy` `all` | `any`;   |
|------------------------------------------------------------------------------------------|----------------------------|
| По умолчанию                                                                             | `satisfy all;`             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location     |

Разрешает доступ, если его разрешают все (`all`) или хотя бы один (`any`) из модулей [Access](https://angie.software//angie/docs/configuration/modules/http/http_access.md#http-access), [Auth Basic](https://angie.software//angie/docs/configuration/modules/http/http_auth_basic.md#http-auth-basic) или [Auth Request](https://angie.software//angie/docs/configuration/modules/http/http_auth_request.md#http-auth-request).

```nginx
location / {
  satisfy any;

  allow 192.168.1.0/32;
  deny  all;

  auth_basic           "closed site";
  auth_basic_user_file conf/htpasswd;
}
```

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

<a id="send-lowat"></a>

### send_lowat

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `send_lowat` размер;   |
|------------------------------------------------------------------------------------------|------------------------|
| По умолчанию                                                                             | `send_lowat 0;`        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location |

При установке этой директивы в ненулевое значение Angie будет пытаться
минимизировать число операций отправки на клиентских сокетах либо при помощи
флага `NOTE_LOWAT` метода [kqueue](https://angie.software//angie/docs/configuration/processing.md#kqueue), либо при помощи
параметра сокета `SO_SNDLOWAT`. В обоих случаях будет использован
указанный размер.

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

<a id="send-timeout"></a>

### send_timeout

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `send_timeout` время;   |
|------------------------------------------------------------------------------------------|-------------------------|
| По умолчанию                                                                             | `send_timeout 60s;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location  |

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

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

<a id="sendfile"></a>

### sendfile

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `sendfile` `on` | `off`;              |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `sendfile off;`                       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Разрешает или запрещает использовать `sendfile()`.

Возможно использование [aio](#aio) для подгрузки данных для `sendfile()`:

```nginx
location /video/ {
  sendfile       on;
  tcp_nopush     on;
  aio            on;
}
```

В такой конфигурации функция `sendfile()` вызывается с флагом `SF_NODISKIO`, в результате чего она не блокируется на диске, а сообщает об отсутствии данных в памяти. После этого Angie инициирует асинхронную подгрузку данных, читая один байт. При этом ядро FreeBSD подгружает в память первые 128K байт файла, однако при последующих чтениях файл подгружается частями только по 16K. Изменить это можно с помощью директивы [read_ahead](#read-ahead).

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

<a id="sendfile-max-chunk"></a>

### sendfile_max_chunk

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `sendfile_max_chunk` размер;   |
|------------------------------------------------------------------------------------------|--------------------------------|
| По умолчанию                                                                             | `sendfile_max_chunk 2m;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location         |

Ограничивает объем данных, который может передан за один вызов `sendfile()`. Без этого ограничения одно быстрое соединение может целиком захватить рабочий процесс.

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

<a id="server"></a>

### server

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `server` { ... }   |
|------------------------------------------------------------------------------------------|--------------------|
| По умолчанию                                                                             | —                  |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http               |

Задает конфигурацию для виртуального сервера. Четкого разделения виртуальных серверов на IP-based (на основании IP-адреса) и name-based (на основании поля "Host" заголовка запроса) нет. Вместо этого директивами [listen](#listen) описываются все адреса и порты, на которых нужно принимать соединения для этого сервера, а в директиве [server_name](#server-name) указываются все имена серверов.

Подробнее: [Как обрабатываются запросы](https://angie.software//angie/docs/configuration/processing.md#request-processing)

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

<a id="server-name"></a>

### server_name

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_name` имя ...;   |
|------------------------------------------------------------------------------------------|--------------------------|
| По умолчанию                                                                             | `server_name ""`;        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | server                   |

Задает имена виртуального сервера, например:

```nginx
server {
  server_name example.com www.example.com;
}
```

Первое имя становится основным именем сервера.

В именах серверов можно использовать звездочку ("\*") для замены первой или последней части имени:

```nginx
server {
  server_name example.com *.example.com www.example.*;
}
```

Такие имена называются именами с маской.

Два первых вышеприведенных имени можно объединить в одно:

```nginx
server {
  server_name .example.com;
}
```

В качестве имени сервера можно также использовать регулярное выражение, указав перед ним тильду ("~"):

```nginx
server {
  server_name ~^www\d+\.example\.com$ www.example.com;
}
```

Регулярное выражение может содержать группы захвата, которые могут затем использоваться в других директивах:

```nginx
server {
  server_name ~^(www\.)?(.+)$;

  location / {
     root /sites/$2;
  }
}

server {
  server_name _;

  location / {
     root /sites/default;
  }
}
```

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

```nginx
  server {
    server_name ~^(www\.)?(?<domain>.+)$;

    location / {
       root /sites/$domain;
    }
  }

server {
    server_name _;

    location / {
       root /sites/default;
    }
  }
```

#### NOTE
Если параметр директивы задан как [$hostname](#v-hostname),
используется имя хоста веб-сервера.

Можно также указать пустое имя сервера (`""`):

```nginx
server {
    server_name www.example.com "";
}
```

При поиске виртуального сервера по имени,
которому соответствует несколько указанных вариантов
(например, одновременно подходят и имя с маской, и регулярное выражение),
будет выбран первый подходящий вариант в следующем порядке приоритета:

- точное имя;
- самое длинное имя с маской в начале, например `*.example.com`;
- самое длинное имя с маской в конце, например `mail.*`;
- первое подходящее регулярное выражение (в порядке следования в конфигурации),
  в том числе пустое имя.

#### WARNING
Чтобы использовать `server_name` с TLS,
необходима терминация TLS-соединения.
Эта директива сопоставляется с `Host` в HTTP-запросе,
поэтому рукопожатие должно быть закончено, а соединение расшифровано.

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

<a id="server-name-in-redirect"></a>

### server_name_in_redirect

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_name_in_redirect` `on` | `off`;   |
|------------------------------------------------------------------------------------------|-------------------------------------------|
| По умолчанию                                                                             | `server_name_in_redirect off`;            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                    |

Разрешает или запрещает использовать в [абсолютных](#absolute-redirect) перенаправлениях, выдаваемых Angie, основное имя сервера, задаваемое директивой [server_name](#server-name).

| `on`   | используется основное имя сервера, задаваемое директивой [server_name](#server-name)                                   |
|--------|------------------------------------------------------------------------------------------------------------------------|
| `off`  | используется имя, указанное в поле "Host" заголовка запроса. Если же этого поля нет, то используется IP-адрес сервера. |

Использование в перенаправлениях порта управляется директивой [port_in_redirect](#port-in-redirect).

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

<a id="server-names-hash-bucket-size"></a>

### server_names_hash_bucket_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_names_hash_bucket_size` размер;            |
|------------------------------------------------------------------------------------------|----------------------------------------------------|
| По умолчанию                                                                             | `server_names_hash_bucket_size 32` | `64` | `128;` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                                               |

Задает размер корзины в хэш-таблицах имен серверов. Значение по умолчанию зависит от размера строки кэша процессора. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

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

<a id="server-names-hash-max-size"></a>

### server_names_hash_max_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_names_hash_max_size` размер;   |
|------------------------------------------------------------------------------------------|----------------------------------------|
| По умолчанию                                                                             | `server_names_hash_max_size 512`;      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                                   |

Задает максимальный размер хэш-таблиц имен серверов. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

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

<a id="server-tokens"></a>

### server_tokens

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_tokens` `on` | `off` | `build` | строка;   |
|------------------------------------------------------------------------------------------|----------------------------------------------------|
| По умолчанию                                                                             | `server_tokens on;`                                |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                             |

Разрешает или запрещает указывать версию Angie
на страницах ошибок и в поле заголовка ответа `Server`.
Если указан параметр `build`,
то вместе с версией будет также указано имя сборки,
заданное соответствующим параметром скрипта [configure](https://angie.software//angie/docs/installation/sourcebuild.md#configure).

В Angie PRO директива может быть задана строкой,
которая может также содержать переменные.
Тогда на страницах ошибок и в поле заголовка ответа `Server`
вместо имени сервера, версии и имени сборки
будет указываться значение этой строки с подставленными переменными.
Пустая строка запрещает выдачу поля `Server`.

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

<a id="status-zone"></a>

### status_zone

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `status_zone` `off` | зона | ключ `zone=`зона[:число];   |
|------------------------------------------------------------------------------------------|----------------------------------------------------------|
| По умолчанию                                                                             | —                                                        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | server, location, if в location                          |

Выделяет зону разделяемой памяти для сбора метрик
[/status/http/location_zones/<зона>](https://angie.software//angie/docs/configuration/modules/http/http_api.md#api-status-http-location-zones) и [/status/http/server_zones/<зона>](https://angie.software//angie/docs/configuration/modules/http/http_api.md#api-status-http-server-zones).

Несколько контекстов `server`
могут совместно использовать одну и ту же зону для сбора данных;
особое значение `off`
выключает сбор данных во вложенных блоках `location`.

Синтаксис с одним значением зоны
объединяет все метрики для текущего контекста в одну зону разделяемой памяти:

```nginx
server {

    listen 80;
    server_name *.example.com;

    status_zone single;
    # ...
}
```

Альтернативный синтаксис позволяет задавать следующие параметры:

| ключ                   | Строка с переменными, значение которой определяет группировку запросов в<br/>зоне. Все запросы, дающие одинаковые значения после подстановки,<br/>объединяются в одну группу. Если подстановка возвращает пустое значение,<br/>метрики не обновляются.   |
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| зона                   | Имя зоны разделяемой памяти.                                                                                                                                                                                                                             |
| число (необязательный) | Максимальное количество отдельных групп для сбора метрик.<br/>Если новые значения ключа превышают этот лимит, они объединяются в группу `zone`.<br/><br/>Значение по умолчанию — 1.                                                                      |

В следующем примере все запросы с одинаковым значением `$host`
группируются в `host_zone`. Метрики собираются отдельно для каждого
уникального значения `$host` до тех пор, пока количество групп метрик не
достигнет 10. После этого любые новые значения `$host` будут добавляться в
группу `host_zone`:

```nginx
server {

    listen 80;
    server_name *.example.com;

    status_zone $host zone=host_zone:10;

    location / {

        proxy_pass http://example.com;
    }
}
```

Результирующие метрики разделяются по отдельным хостам в выводе API.

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

<a id="subrequest-output-buffer-size"></a>

### subrequest_output_buffer_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `subrequest_output_buffer_size` размер;    |
|------------------------------------------------------------------------------------------|--------------------------------------------|
| По умолчанию                                                                             | `subrequest_output_buffer_size 4k` | `8k;` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                     |

Задает размер буфера, используемого для хранения тела ответа подзапроса. По умолчанию размер одного буфера равен размеру страницы памяти. В зависимости от платформы это или `4K`, или `8K`, однако его можно сделать меньше.

#### NOTE
Директива применима только для подзапросов, тело ответа которых сохраняется в памяти. Например, подобные подзапросы создаются при помощи [SSI](https://angie.software//angie/docs/configuration/modules/http/http_ssi.md#ssi-include-set).

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

<a id="tcp-nodelay"></a>

### tcp_nodelay

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `tcp_nodelay` `on` | `off`;   |
|------------------------------------------------------------------------------------------|-------------------------------|
| По умолчанию                                                                             | `tcp_nodelay on`;             |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location        |

Разрешает или запрещает использование параметра `TCP_NODELAY`. Параметр включается при переходе соединения в состояние keep-alive. Также, он включается на SSL-соединениях, при небуферизованном проксировании и при [проксировании WebSocket](https://angie.software//angie/docs/configuration/processing.md#websocket-proxy).

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

<a id="tcp-nopush"></a>

### tcp_nopush

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `tcp_nopush` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------|
| По умолчанию                                                                             | `tcp_nopush off`;            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location       |

Разрешает или запрещает использование параметра сокета `TCP_NOPUSH` во
FreeBSD или `TCP_CORK` в Linux. Параметр включается только при
использовании [sendfile](#sendfile). Включение параметра позволяет:

* передавать заголовок ответа и начало файла в одном пакете в Linux и во FreeBSD 4.\*;
* передавать файл полными пакетами.

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

<a id="try-files"></a>

### try_files

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `try_files` файл ... uri;<br/><br/>`try_files` файл ... =код;   |
|------------------------------------------------------------------------------------------|-----------------------------------------------------------------|
| По умолчанию                                                                             | —                                                               |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | server, location                                                |

Проверяет существование файлов в заданном порядке и использует для обработки
запроса первый найденный файл, причем обработка делается в контексте этого же
`location`'а. Путь к файлу строится из параметра файл в соответствии с
директивами [root](#root) и [alias](#alias). С помощью косой черты в
конце имени можно проверить существование каталога, например, `$uri/`. В
случае, если ни один файл не найден, производится внутреннее перенаправление на
uri, заданный последним параметром.

Например:

```nginx
location /images/ {
  try_files $uri /images/default.gif;
}

location = /images/default.gif {
  expires 30s;
}
```

Последний параметр может быть URI для внутреннего перенаправления,
ссылкой на именованный `location` (например, `@drupal`)
или кодом ответа в форме `=код` (например, `=404`):

```nginx
location / {
  try_files $uri $uri/index.html $uri.html =404;
}
```

Следует помнить, что чрезмерное использование директивы `try_files`
увеличивает число системных вызовов,
что может негативно сказаться на производительности.

Так, не следует использовать `try_files` для формирования поведения,
фактически дублирующего поведение по умолчанию, например:

```nginx
location /bad_pattern {

      # try_files $uri $uri/ =404;  # не рекомендуется!
}
```

Также не следует использовать `try_files`
исключительно для перенаправления при отсутствии файла.
Дело в том, что директива `try_files` имеет две особенности:

- Во-первых, она проверяет существование каждого файла,
  что увеличивает нагрузку на систему.
- Во-вторых, любые ошибки открытия файла (например, `too many open files`,
  ошибки прав доступа) также считаются отсутствием файла и вызывают переход к
  запасному обработчику, что может привести к подмене ошибок 5xx успешными
  ответами и некорректному кэшированию.

Так, на практике можно встретить следующую проблемную конструкцию:

```nginx
location / {
   try_files $uri $uri/ @drupal;  # не рекомендуется!
}
```

Ее проблема в том, что единственная цель здесь — перенаправление.
Использование `try_files` приводит к перечисленным выше недостаткам,
но не дает никаких преимуществ,
поскольку проверка существования файлов не нужна.
Правильное решение — использовать директиву [error_page](#error-page),
которая лишена этих недостатков:

```nginx
error_page 404 = @drupal;
log_not_found off;
```

Напротив, в следующем примере:

```nginx
location ~ \.php$ {
  try_files $uri @drupal;

  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;

#  ...
}
```

Директива `try_files` проверяет существование PHP-файла,
прежде чем передать запрос настроенному в том же блоке FastCGI-серверу;
здесь использование `try_files` оправдано.

### Пример использования при проксировании Mongrel:

```nginx
location / {
  try_files /system/maintenance.html
           $uri $uri/index.html $uri.html
           @mongrel;
}

location @mongrel {
  proxy_pass http://mongrel;
}
```

### Пример использования вместе с Drupal/FastCGI:

```nginx
location / {
  error_page 404 = @drupal;
}

location ~ \.php$ {
  try_files $uri @drupal;

  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
  fastcgi_param QUERY_STRING    $args;

#  ... прочие fastcgi_param
}

location @drupal {
  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to/index.php;
  fastcgi_param SCRIPT_NAME     /index.php;
  fastcgi_param QUERY_STRING    q=$uri&$args;

#  ... прочие fastcgi_param
}
```

### Пример использования вместе с Wordpress и Joomla:

```nginx
location / {
  error_page 404 = @wordpress;
}

location ~ \.php$ {
  try_files $uri @wordpress;

  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
#  ... прочие fastcgi_param
}

location @wordpress {
  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to/index.php;
#  ... прочие fastcgi_param
}
```

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

<a id="types"></a>

### types

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `types` { ... }                                            |
|------------------------------------------------------------------------------------------|------------------------------------------------------------|
| По умолчанию                                                                             | `types  *text/html html; image/gif gif; image/jpeg jpg;* ` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                                     |

Задает соответствие расширений имен файлов и MIME-типов ответов. Расширения нечувствительны к регистру символов. Одному MIME-типу может соответствовать несколько расширений, например:

```nginx
types {
  application/octet-stream bin exe dll;
  application/octet-stream deb;
  application/octet-stream dmg;
}
```

Достаточно полная таблица соответствий входит в дистрибутив Angie и находится в файле `conf/mime.types`.

Для того чтобы для определенного `location`'а для всех ответов выдавался MIME-тип "application/octet-stream", можно использовать следующее:

```nginx
location /download/ {
  types        { }
  default_type application/octet-stream;
}
```

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

<a id="types-hash-bucket-size"></a>

### types_hash_bucket_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `types_hash_bucket_size` размер;   |
|------------------------------------------------------------------------------------------|------------------------------------|
| По умолчанию                                                                             | `types_hash_bucket_size 64;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location             |

Задает размер корзины в хэш-таблицах типов. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

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

<a id="types-hash-max-size"></a>

### types_hash_max_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `types_hash_max_size` размер;   |
|------------------------------------------------------------------------------------------|---------------------------------|
| По умолчанию                                                                             | `types_hash_max_size 1024;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location          |

Задает максимальный размер хэш-таблиц типов. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

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

<a id="underscores-in-headers"></a>

### underscores_in_headers

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `underscores_in_headers` `on` | `off`;   |
|------------------------------------------------------------------------------------------|------------------------------------------|
| По умолчанию                                                                             | `underscores_in_headers off`;            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server                             |

Разрешает или запрещает использование символов подчеркивания в полях заголовка запроса клиента. Если использование символов подчеркивания запрещено, поля заголовка запроса, в именах которых есть подчеркивания, помечаются как недопустимые и подпадают под действие директивы [ignore_invalid_headers](#ignore-invalid-headers).

Если директива указана на уровне [server](#server), то может использоваться значение из сервера по умолчанию.

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

<a id="variables-hash-bucket-size"></a>

### variables_hash_bucket_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `variables_hash_bucket_size` размер;   |
|------------------------------------------------------------------------------------------|----------------------------------------|
| По умолчанию                                                                             | `variables_hash_bucket_size 64;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                                   |

Задает размер корзины в хэш-таблице переменных. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

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

<a id="variables-hash-max-size"></a>

### variables_hash_max_size

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `variables_hash_max_size` размер;   |
|------------------------------------------------------------------------------------------|-------------------------------------|
| По умолчанию                                                                             | `variables_hash_max_size 2048;`     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                                |

Задает максимальный размер хэш-таблиц переменных. Подробнее настройка хэш-таблиц обсуждается [отдельно](https://angie.software//angie/docs/configuration/configfile.md#configure-hashes).

<a id="http-core-variables"></a>

## Встроенные переменные

Модуль `http_core` поддерживает встроенные переменные, имена которых совпадают с именами переменных веб-сервера Apache. Прежде всего, это переменные, представляющие из себя поля заголовка запроса клиента, такие как `$http_user_agent`, `$http_cookie` и тому подобное. Кроме того, есть и другие переменные:

<a id="v-angie-version"></a>

### `$angie_version`

версия Angie

<a id="v-arg"></a>

### `$arg_<имя>`

аргумент имя в строке запроса

<a id="v-args"></a>

### `$args`

аргументы в строке запроса

<a id="v-binary-remote-addr"></a>

### `$binary_remote_addr`

адрес клиента в бинарном виде, длина значения всегда 4 байта для IPv4-адресов или 16 байт для IPv6-адресов

<a id="v-body-bytes-sent"></a>

### `$body_bytes_sent`

число байт, переданное клиенту, без учета заголовка ответа; переменная совместима с параметром "%B" модуля Apache `mod_log_config`

<a id="v-bytes-sent"></a>

### `$bytes_sent`

число байт, переданных клиенту

<a id="v-connection"></a>

### `$connection`

порядковый номер соединения

<a id="v-connection-requests"></a>

### `$connection_requests`

текущее число запросов в соединении

<a id="v-connection-time"></a>

### `$connection_time`

время соединения в секундах с точностью до миллисекунд

<a id="v-content-length"></a>

### `$content_length`

поле `Content-Length`  заголовка запроса

<a id="v-content-type"></a>

### `$content_type`

поле `Content-Type` заголовка запроса

<a id="v-cookie"></a>

### `$cookie_<имя>`

cookie с указанным именем

<a id="v-document-root"></a>

### `$document_root`

значение директивы [root](#root) или [alias](#alias) для текущего запроса

<a id="v-document-uri"></a>

### `$document_uri`

то же, что и [$uri](#v-uri)

<a id="v-host"></a>

### `$host`

в порядке приоритета: имя хоста из строки запроса, или имя хоста из поля "Host" заголовка запроса, или имя сервера, соответствующего запросу

<a id="v-hostname"></a>

### `$hostname`

имя хоста

<a id="v-http"></a>

### `$http_<имя>`

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

<a id="v-https"></a>

### `$https`

`on` если соединение работает в режиме SSL, либо пустая строка

<a id="v-is-args"></a>

### `$is_args`

`?`, если в строке запроса есть аргументы, и пустая строка, если их нет

<a id="v-is-request-port"></a>

### `$is_request_port`

`:`, если значение [$request_port](#v-request-port) непустое, либо пустая строка

<a id="v-limit-rate"></a>

### `$limit_rate`

установка этой переменной позволяет ограничивать скорость передачи ответа, см. [limit_rate](#limit-rate)

<a id="v-msec"></a>

### `$msec`

текущее время в секундах с точностью до миллисекунд

<a id="v-nginx-version"></a>

### `$nginx_version`

версия nginx

<a id="v-pid"></a>

### `$pid`

номер (PID) рабочего процесса

<a id="v-pipe"></a>

### `$pipe`

`p` если запрос был pipelined, иначе `.`

<a id="v-proxy-protocol-addr"></a>

### `$proxy_protocol_addr`

Адрес клиента, полученный из заголовка протокола PROXY.

Протокол PROXY должен быть предварительно включен при помощи установки параметра `proxy_protocol` в директиве [listen](#listen).

<a id="v-proxy-protocol-port"></a>

### `$proxy_protocol_port`

Порт клиента, полученный из заголовка протокола PROXY.

Протокол PROXY должен быть предварительно включен при помощи установки параметра `proxy_protocol` в директиве [listen](#listen).

<a id="v-proxy-protocol-server-addr"></a>

### `$proxy_protocol_server_addr`

Адрес сервера, полученный из заголовка протокола PROXY.

Протокол PROXY должен быть предварительно включен при помощи установки параметра `proxy_protocol` в директиве [listen](#listen).

<a id="v-proxy-protocol-server-port"></a>

### `$proxy_protocol_server_port`

Порт сервера, полученный из заголовка протокола PROXY.

Протокол PROXY должен быть предварительно включен при помощи установки параметра `proxy_protocol` в директиве [listen](#listen).

<a id="v-proxy-protocol-tlv"></a>

### `$proxy_protocol_tlv_<имя>`

TLV, полученный из заголовка протокола PROXY. Имя может быть именем типа TLV или его числовым значением. В последнем случае значение задается в шестнадцатеричном виде и должно начинаться с `0x`:

```none
$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
```

SSL TLV могут также быть доступны как по имени типа TLV, так и по его числовому значению, оба должны начинаться с `ssl_`:

```none
$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21
```

Поддерживаются следующие имена типов TLV:

* `alpn (0x01)` - протокол более высокого уровня, используемый поверх соединения
* `authority (0x02)` - значение имени хоста, передаваемое клиентом
* `unique_id (0x05)` - уникальный идентификатор соединения
* `netns (0x30)` - имя пространства имен
* `ssl (0x20)` - структура SSL TLV в бинарном виде

Поддерживаются следующие имена типов SSL TLV:

* `ssl_version (0x21)` - версия SSL, используемая в клиентском соединении
* `ssl_cn (0x22)` - Common Name сертификата
* `ssl_cipher (0x23)` - имя используемого шифра
* `ssl_sig_alg (0x24)` - алгоритм, используемый для подписи сертификата
* `ssl_key_alg (0x25)` - алгоритм публичного ключа

Также поддерживается следующее специальное имя типа SSL TLV:

* `ssl_verify` - результат проверки клиентского сертификата: `0`, если клиент предоставил сертификат и он был успешно верифицирован, либо ненулевое значение

Протокол PROXY должен быть предварительно включен при помощи установки параметра `proxy_protocol` в директиве [listen](#listen).

<a id="v-query-string"></a>

### `$query_string`

то же, что и [$args](#v-args)

<a id="v-realpath-root"></a>

### `$realpath_root`

абсолютный путь, соответствующий значению директивы [root](#root) или [alias](#alias) для текущего запроса, в котором все символические ссылки преобразованы в реальные пути

<a id="v-remote-addr"></a>

### `$remote_addr`

адрес клиента

<a id="v-remote-port"></a>

### `$remote_port`

порт клиента

<a id="v-remote-user"></a>

### `$remote_user`

имя пользователя, использованное в Basic аутентификации

<a id="v-request"></a>

### `$request`

первоначальная строка запроса целиком

<a id="v-request-body"></a>

### `$request_body`

Тело запроса.
Значение переменной  *появляется* в [location](#location)'ах, обрабатываемых директивами [proxy_pass](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass), [fastcgi_pass](https://angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#fastcgi-pass), [uwsgi_pass](https://angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-pass) и [scgi_pass](https://angie.software//angie/docs/configuration/modules/http/http_scgi.md#scgi-pass), когда тело было прочитано в [буфер в памяти](#client-body-buffer-size).

<a id="v-request-body-file"></a>

### `$request_body_file`

Имя временного файла, в котором хранится тело запроса.
По завершении обработки файл необходимо удалить. Для того чтобы тело запроса всегда записывалось в файл, следует включить [client_body_in_file_only](#client-body-in-file-only). При передаче имени временного файла в проксированном запросе или в запросе к FastCGI/uwsgi/SCGI-серверу следует запретить передачу самого тела директивами [proxy_pass_request_body off](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass-request-body), [fastcgi_pass_request_body off](https://angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#fastcgi-pass-request-body), [uwsgi_pass_request_body off](https://angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-pass-request-body) или [scgi_pass_request_body off](https://angie.software//angie/docs/configuration/modules/http/http_scgi.md#scgi-pass-request-body) соответственно.

<a id="v-request-completion"></a>

### `$request_completion`

`OK`, если запрос завершился, либо пустая строка

<a id="v-request-filename"></a>

### `$request_filename`

путь к файлу для текущего запроса, формируемый из директив [root](#root) или [alias](#alias) и URI запроса

<a id="v-request-id"></a>

### `$request_id`

уникальный идентификатор запроса, сформированный из 16 случайных байт, в шестнадцатеричном виде

<a id="v-request-length"></a>

### `$request_length`

длина запроса (включая строку запроса, заголовок и тело запроса)

<a id="v-request-method"></a>

### `$request_method`

метод запроса, обычно `GET` или `POST`

<a id="v-request-port"></a>

### `$request_port`

в порядке приоритета: номер порта из компонента authority URI, или номер порта из поля заголовка запроса `Host`

<a id="v-request-time"></a>

### `$request_time`

время обработки запроса в секундах с точностью до миллисекунд; время, прошедшее с момента чтения первых байт от клиента

<a id="v-request-uri"></a>

### `$request_uri`

первоначальный URI запроса целиком (с аргументами), не изменяется в процессе обработки запроса; см. [$uri](#v-uri) — текущий URI с учётом всех преобразований

<a id="v-scheme"></a>

### `$scheme`

схема запроса, "http" или "https"

<a id="v-sent-body"></a>

### `$sent_body`

тело ответа подзапроса или внешнего запроса, если оно сохранено в памяти;
иначе пустая строка

<a id="v-sent-http"></a>

### `$sent_http_<имя>`

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

<a id="v-sent-trailer"></a>

### `$sent_trailer_<имя>`

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

<a id="v-server-addr"></a>

### `$server_addr`

Адрес сервера, принявшего запрос.

Получение значения этой переменной обычно требует одного системного вызова. Чтобы избежать системного вызова, в директивах [listen](#listen) следует указывать адреса и использовать параметр `bind`.

<a id="v-server-name"></a>

### `$server_name`

имя сервера, принявшего запрос

<a id="v-server-port"></a>

### `$server_port`

порт сервера, принявшего запрос

<a id="v-server-protocol"></a>

### `$server_protocol`

протокол запроса, обычно "HTTP/1.0", "HTTP/1.1" или "HTTP/2.0"

<a id="v-status"></a>

### `$status`

статус ответа

<a id="v-time-iso8601"></a>

### `$time_iso8601`

локальное время в формате по стандарту ISO 8601

<a id="v-time-local"></a>

### `$time_local`

локальное время в Common Log Format

<a id="v-tcpinfo"></a>

### `$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space`

информация о клиентском TCP-соединении; доступна на системах, поддерживающих параметр сокета `TCP_INFO`

<a id="v-uri"></a>

### `$uri`

Текущий URI запроса в [нормализованном](#location) виде.

Значение `$uri` может изменяться в процессе обработки запроса, например, при перезаписи с помощью [rewrite](https://angie.software//angie/docs/configuration/modules/http/http_rewrite.md#id5), при внутренних перенаправлениях или при использовании индексных файлов.
