Модуль ngx_http_memcached_module
Модуль ngx_http_memcached_module позволяет получать
ответ из сервера memcached.
Ключ задаётся в переменной $memcached_key.
Ответ в memcached должен быть предварительно помещён внешним по отношению
к nginx’у способом.
Пример конфигурации
server {
    location / {
        set            $memcached_key "$uri?$args";
        memcached_pass host:11211;
        error_page     404 502 504 = @fallback;
    }
    location @fallback {
        proxy_pass     http://backend;
    }
}
Директивы
| Синтаксис: | memcached_bind 
     | 
|---|---|
| Умолчание: | — | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 0.8.22.
Задаёт локальный IP-адрес с необязательным портом (1.11.2),
который будет использоваться в исходящих соединениях с сервером memcached.
В значении параметра допустимо использование переменных (1.3.12).
Специальное значение off (1.3.12) отменяет действие
унаследованной с предыдущего уровня конфигурации
директивы memcached_bind, позволяя системе
самостоятельно выбирать локальный IP-адрес и порт.
Параметр transparent (1.11.0) позволяет
задать нелокальный IP-aдрес, который будет использоваться в
исходящих соединениях с сервером memcached,
например, реальный IP-адрес клиента:
memcached_bind $remote_addr transparent;
 
Для работы параметра
обычно требуется
запустить рабочие процессы nginx с привилегиями
суперпользователя.
В Linux этого не требуется (1.13.8), так как если
указан параметр transparent, то рабочие процессы
наследуют capability CAP_NET_RAW из главного процесса.
Также необходимо настроить таблицу маршрутизации ядра
для перехвата сетевого трафика с сервера memcached.
| Синтаксис: | memcached_buffer_size  | 
|---|---|
| Умолчание: | memcached_buffer_size 4k|8k; | 
| Контекст: | http,server,location | 
Задаёт размер буфера, в который будет читаться ответ,
получаемый от сервера memcached.
Ответ синхронно передаётся клиенту сразу же по мере его поступления.
| Синтаксис: | memcached_connect_timeout  | 
|---|---|
| Умолчание: | memcached_connect_timeout 60s; | 
| Контекст: | http,server,location | 
Задаёт таймаут для установления соединения с сервером memcached. Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд.
| Синтаксис: | memcached_force_ranges  | 
|---|---|
| Умолчание: | memcached_force_ranges off; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.7.7.
Включает поддержку диапазонов запрашиваемых байт (byte-range) для кэшированных и некэшированных ответов сервера memcached вне зависимости от наличия поля “Accept-Ranges” в заголовках этих ответов.
| Синтаксис: | memcached_gzip_flag  | 
|---|---|
| Умолчание: | — | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.3.6.
Включает проверку указанного флага в ответе
сервера memcached и установку поля “Content-Encoding”
заголовка ответа в “gzip”, если этот флаг установлен.
| Синтаксис: | memcached_next_upstream 
     | 
|---|---|
| Умолчание: | memcached_next_upstream error timeout; | 
| Контекст: | http,server,location | 
Определяет, в каких случаях запрос будет передан следующему серверу:
- error
- произошла ошибка соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера;
- timeout
- произошёл таймаут во время соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера;
- invalid_response
- сервер вернул пустой или неверный ответ;
- not_found
- сервер не нашёл ответ;
- off
- запрещает передачу запроса следующему серверу.
Необходимо понимать, что передача запроса следующему серверу возможна только при условии, что клиенту ещё ничего не передавалось. То есть, если ошибка или таймаут возникли в середине передачи ответа, то исправить это уже невозможно.
Директива также определяет, что считается
неудачной
попыткой работы с сервером.
Случаи error, timeout и
invalid_response
всегда считаются неудачными попытками, даже если они не указаны в директиве.
Случай not_found
никогда не считается неудачной попыткой.
Передача запроса следующему серверу может быть ограничена по количеству попыток и по времени.
| Синтаксис: | memcached_next_upstream_timeout  | 
|---|---|
| Умолчание: | memcached_next_upstream_timeout 0; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.7.5.
Ограничивает время, в течение которого возможна передача запроса
следующему серверу.
Значение 0 отключает это ограничение.
| Синтаксис: | memcached_next_upstream_tries  | 
|---|---|
| Умолчание: | memcached_next_upstream_tries 0; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.7.5.
Ограничивает число допустимых попыток для передачи запроса
следующему серверу.
Значение 0 отключает это ограничение.
| Синтаксис: | memcached_pass  | 
|---|---|
| Умолчание: | — | 
| Контекст: | location,if в location | 
Задаёт адрес сервера memcached. Адрес может быть указан в виде доменного имени или IP-адреса, и порта:
memcached_pass localhost:11211;
или в виде пути UNIX-сокета:
memcached_pass unix:/tmp/memcached.socket;
Если доменному имени соответствует несколько адресов, то все они будут использоваться по очереди (round-robin). И, кроме того, адрес может быть группой серверов.
| Синтаксис: | memcached_read_timeout  | 
|---|---|
| Умолчание: | memcached_read_timeout 60s; | 
| Контекст: | http,server,location | 
Задаёт таймаут при чтении ответа сервера memcached. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями чтения. Если по истечении этого времени сервер memcached ничего не передаст, соединение закрывается.
| Синтаксис: | memcached_send_timeout  | 
|---|---|
| Умолчание: | memcached_send_timeout 60s; | 
| Контекст: | http,server,location | 
Задаёт таймаут при передаче запроса серверу memcached. Таймаут устанавливается не на всю передачу запроса, а только между двумя операциями записи. Если по истечении этого времени сервер memcached не примет новых данных, соединение закрывается.
| Синтаксис: | memcached_socket_keepalive  | 
|---|---|
| Умолчание: | memcached_socket_keepalive off; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.15.6.
Конфигурирует поведение “TCP keepalive”
для исходящих соединений к серверу memcached.
По умолчанию для сокета действуют настройки операционной системы.
Если указано значение “on”, то
для сокета включается параметр SO_KEEPALIVE.
Встроенные переменные
- $memcached_key
- Задаёт ключ для получения ответа из сервера memcached.
