<!-- review: finished -->

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

# Memcached

Позволяет получать ответ из сервера memcached. Ключ задается в переменной [$memcached_key](#v-memcached-key). Ответ в memcached должен быть предварительно помещен внешним по отношению к Angie способом.

<a id="configuration-example-29"></a>

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

```nginx
server {
    location / {
        set            $memcached_key "$uri?$args";
        memcached_pass host:11211;
        error_page     404 502 504 = @fallback;
    }

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

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

## Директивы

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

<a id="memcached-bind"></a>

### memcached_bind

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

Задает локальный IP-адрес с необязательным портом, который будет использоваться в исходящих соединениях с сервером memcached. В значении параметра допустимо использование переменных. Специальное значение `off` отменяет действие унаследованной с предыдущего уровня конфигурации директивы memcached_bind, позволяя системе самостоятельно выбирать локальный IP-адрес и порт.

Параметр `transparent` позволяет задать нелокальный IP-aдрес, который будет использоваться в исходящих соединениях с проксируемым сервером, например, реальный IP-адрес клиента:

```nginx
memcached_bind $remote_addr transparent;
```

Для работы параметра обычно требуется запустить рабочие процессы Angie с привилегиями [суперпользователя](https://angie.software//angie/docs/configuration/modules/core.md#user). В Linux это не требуется, так как если указан параметр transparent, то рабочие процессы наследуют capability CAP_NET_RAW из главного процесса.

#### NOTE
Необходимо настроить таблицу маршрутизации ядра для перехвата сетевого трафика с серверa memcached.

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

<a id="memcached-buffer-size"></a>

### memcached_buffer_size

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

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

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

<a id="memcached-connect-timeout"></a>

### memcached_connect_timeout

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

Задает таймаут для установления соединения с сервером memcached. Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд.

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

<a id="memcached-gzip-flag"></a>

### memcached_gzip_flag

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

Включает проверку указанного флага в ответе сервера memcached и установку поля `Content-Encoding`  заголовка ответа в "gzip", если этот флаг установлен.

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

<a id="memcached-next-upstream"></a>

### memcached_next_upstream

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

Определяет, в каких случаях запрос будет передан следующему в группе [upstream](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#http-upstream) серверу:

| `error`            | произошла ошибка соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера;           |
|--------------------|-------------------------------------------------------------------------------------------------------------|
| `timeout`          | произошел таймаут во время соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера; |
| `invalid_response` | сервер вернул пустой или неверный ответ;                                                                    |
| `not_found`        | сервер не нашел ответ;                                                                                      |
| `off`              | запрещает передачу запроса следующему серверу.                                                              |

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

Директива также определяет, что считается [неудачной попыткой](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#max-fails) работы с сервером.

| `error`, `timeout`, `invalid_response`   | Всегда считаются неудачными попытками, даже если они не указаны в директиве.   |
|------------------------------------------|--------------------------------------------------------------------------------|
| `not_found`                              | Никогда не считается неудачными попытками.                                     |

Передача запроса следующему серверу может быть ограничена по [количеству попыток](#memcached-next-upstream-tries) и по [времени](#memcached-next-upstream-timeout).

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

<a id="memcached-next-upstream-timeout"></a>

### memcached_next_upstream_timeout

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

Ограничивает время, в течение которого возможна передача запроса [следующему](#memcached-next-upstream) серверу.

| `0`   | отключает это ограничение   |
|-------|-----------------------------|

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

<a id="memcached-next-upstream-tries"></a>

### memcached_next_upstream_tries

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

Ограничивает число допустимых попыток для передачи запроса [следующему](#memcached-next-upstream) серверу.

| `0`   | отключает это ограничение   |
|-------|-----------------------------|

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

<a id="memcached-pass"></a>

### memcached_pass

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

Задает адрес сервера memcached. Адрес может быть указан в виде доменного имени или IP-адреса, и порта:

```nginx
memcached_pass localhost:11211;
```

или в виде пути UNIX-сокета:

```nginx
memcached_pass unix:/tmp/memcached.socket;
```

Если доменному имени соответствует несколько адресов, то все они будут использоваться по очереди (round-robin). Кроме того, в качестве адреса можно указать [группу серверов](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#http-upstream).

#### NOTE
Если `memcached_pass` стоит в `location` с косой чертой в конце префикса
(например, `location /name/`),
и при этом в директиве [auto_redirect](https://angie.software//angie/docs/configuration/modules/http/index.md#auto-redirect) указано `default`,
запросы без косой черты в конце будут перенаправляться (`/name -> /name/`).

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

<a id="memcached-read-timeout"></a>

### memcached_read_timeout

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

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

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

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

### memcached_send_timeout

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

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

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

<a id="memcached-socket-keepalive"></a>

### memcached_socket_keepalive

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

Конфигурирует поведение "TCP keepalive" для исходящих соединений к проксируемому серверу.

| `""`   | По умолчанию для сокета действуют настройки операционной системы.   |
|--------|---------------------------------------------------------------------|
| `on`   | для сокета включается параметр SO_KEEPALIVE                         |

<a id="built-in-variables-4"></a>

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

<a id="v-memcached-key"></a>

### `$memcached_key`

Задает ключ для получения ответа из сервера memcached.
