<!-- review: finished -->

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

# Memcached

O módulo é usado para obter respostas de um servidor memcached. A chave é definida na variável [$memcached_key](#v-memcached-key). Uma resposta deve ser colocada no memcached antecipadamente por meios externos ao Angie.

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

## Exemplo de Configuração

```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>

## Diretivas

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

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

### memcached_bind

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_bind` address [`transparent`] | `off`;   |
|-------------------------------------------------------------------------------------------|-----------------------------------------------------|
| Padrão                                                                                    | —                                                   |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location                              |

Faz com que as conexões de saída para um servidor memcached se originem do endereço IP local especificado com uma porta opcional. O valor do parâmetro pode conter variáveis. O valor especial `off` cancela o efeito da diretiva memcached_bind herdada do nível de configuração anterior, o que permite ao sistema atribuir automaticamente o endereço IP local e a porta.

O parâmetro `transparent` permite que as conexões de saída para um servidor memcached se originem de um endereço IP não local, por exemplo, de um endereço IP real de um cliente:

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

Para que este parâmetro funcione, geralmente é necessário executar os processos worker do Angie com privilégios de [superusuário](https://pt.angie.software//angie/docs/configuration/modules/core.md#user). No Linux isso não é necessário, pois se o parâmetro `transparent` for especificado, os processos worker herdam a capacidade CAP_NET_RAW do processo mestre.

#### NOTE
É necessário configurar a tabela de roteamento do kernel para interceptar o tráfego de rede do servidor memcached.

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

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

### memcached_buffer_size

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_buffer_size` size;   |
|-------------------------------------------------------------------------------------------|---------------------------------|
| Padrão                                                                                    | `memcached_buffer_size 4k|8k;`  |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location          |

Define o tamanho do buffer usado para ler a primeira parte da resposta recebida do servidor memcached. A resposta é passada para o cliente de forma síncrona, assim que é recebida.

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

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

### memcached_connect_timeout

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_connect_timeout` time;   |
|-------------------------------------------------------------------------------------------|-------------------------------------|
| Padrão                                                                                    | `memcached_connect_timeout 60s;`    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location              |

Define um timeout para estabelecer uma conexão com um servidor memcached. Deve-se notar que este timeout geralmente não pode exceder 75 segundos.

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

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

### memcached_gzip_flag

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_gzip_flag` flag;   |
|-------------------------------------------------------------------------------------------|-------------------------------|
| Padrão                                                                                    | —                             |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location        |

Habilita o teste para a presença da flag na resposta do servidor memcached e define o campo de cabeçalho de resposta `Content-Encoding` como "gzip" se a flag estiver definida.

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

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

### memcached_next_upstream

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_next_upstream` `error` | `timeout` | `invalid_response` | `not_found` | `off` ...;   |
|-------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
| Padrão                                                                                    | `memcached_next_upstream error timeout;`                                                        |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location                                                                          |

Especifica em quais casos uma requisição deve ser passada para o próximo servidor no [pool upstream](https://pt.angie.software//angie/docs/configuration/modules/http/http_upstream.md#http-upstream):

| `error`            | ocorreu um erro ao estabelecer uma conexão com o servidor, passar uma requisição para ele ou ler o cabeçalho da resposta;    |
|--------------------|------------------------------------------------------------------------------------------------------------------------------|
| `timeout`          | ocorreu um timeout ao estabelecer uma conexão com o servidor, passar uma requisição para ele ou ler o cabeçalho da resposta; |
| `invalid_response` | um servidor retornou uma resposta vazia ou inválida;                                                                         |
| `not_found`        | uma resposta não foi encontrada no servidor;                                                                                 |
| `off`              | desabilita passar uma requisição para o próximo servidor.                                                                    |

#### NOTE
Deve-se ter em mente que passar uma requisição para o próximo servidor só é possível se nada foi enviado para um cliente ainda. Ou seja, se um erro ou timeout ocorre no meio da transferência de uma resposta, corrigir isso é impossível.

A diretiva também define o que é considerado uma [tentativa malsucedida](https://pt.angie.software//angie/docs/configuration/modules/http/http_upstream.md#max-fails) de comunicação com um servidor.

| `error`, `timeout`, `invalid_response`   | sempre consideradas tentativas malsucedidas, mesmo se não estiverem especificadas na diretiva   |
|------------------------------------------|-------------------------------------------------------------------------------------------------|
| `not_found`                              | nunca considerada uma tentativa malsucedida                                                     |

Passar uma requisição para o próximo servidor pode ser limitado pelo [número de tentativas](#memcached-next-upstream-tries) e por [tempo](#memcached-next-upstream-timeout).

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

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

### memcached_next_upstream_timeout

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_next_upstream_timeout` time;   |
|-------------------------------------------------------------------------------------------|-------------------------------------------|
| Padrão                                                                                    | `memcached_next_upstream_timeout 0;`      |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location                    |

Limita o tempo durante o qual uma requisição pode ser passada para o [próximo](#memcached-next-upstream) servidor.

| `0`   | desativa esta limitação   |
|-------|---------------------------|

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

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

### memcached_next_upstream_tries

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_next_upstream_tries` number;   |
|-------------------------------------------------------------------------------------------|-------------------------------------------|
| Padrão                                                                                    | `memcached_next_upstream_tries 0;`        |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location                    |

Limita o número de tentativas possíveis para passar uma requisição para o [próximo](#memcached-next-upstream) servidor.

| `0`   | desativa esta limitação   |
|-------|---------------------------|

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

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

### memcached_pass

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_pass` address;   |
|-------------------------------------------------------------------------------------------|-----------------------------|
| Padrão                                                                                    | —                           |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | location, if in location    |

Define o endereço do servidor memcached. O endereço pode ser especificado como um nome de domínio ou endereço IP e uma porta:

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

ou como um caminho de socket de domínio UNIX:

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

Se um nome de domínio resolve para vários endereços, todos eles serão usados de forma round-robin. Além disso, um endereço pode ser especificado como um [grupo de servidores](https://pt.angie.software//angie/docs/configuration/modules/http/http_upstream.md#http-upstream).

#### NOTE
If `memcached_pass` is placed in a `location` whose prefix ends with a slash
(for example, `location /name/`),
and the [auto_redirect](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#auto-redirect) directive is set to `default`,
requests without a trailing slash will be redirected (`/name -> /name/`).

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

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

### memcached_read_timeout

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_read_timeout` time;   |
|-------------------------------------------------------------------------------------------|----------------------------------|
| Padrão                                                                                    | `memcached_read_timeout 60s;`    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location           |

Define um timeout para ler uma resposta do servidor memcached. O timeout é definido apenas entre duas operações de leitura sucessivas, não para a transmissão de toda a resposta. Se o servidor memcached não transmitir nada dentro deste tempo, a conexão é fechada.

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

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

### memcached_send_timeout

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_send_timeout` time;   |
|-------------------------------------------------------------------------------------------|----------------------------------|
| Padrão                                                                                    | `memcached_send_timeout 60s;`    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location           |

Define um timeout para transmitir uma requisição para o servidor memcached. O timeout é definido apenas entre duas operações de escrita sucessivas, não para a transmissão de toda a requisição. Se o servidor memcached não receber nada dentro deste tempo, a conexão é fechada.

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

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

### memcached_socket_keepalive

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `memcached_socket_keepalive` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|----------------------------------------------|
| Padrão                                                                                    | `memcached_socket_keepalive off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location                       |

Configura o comportamento "TCP keepalive" para conexões de saída para um servidor memcached.

| `off`   | Por padrão, as configurações do sistema operacional estão em efeito para o socket.   |
|---------|--------------------------------------------------------------------------------------|
| `on`    | A opção de socket SO_KEEPALIVE é ativada para o socket.                              |

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

## Variáveis Integradas

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

### `$memcached_key`

Define uma chave para obter uma resposta de um servidor memcached.
