Module ngx_http_memcached_module

ngx_http_memcached_module模块用于从内存缓存服务器获取响应。密钥在$memcached_key变量中设置。应该通过 nginx 外部的方式预先将响应放入 memcached 中。

Example Configuration

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

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

Directives

Syntax:memcached_bind address [transparent ] | off;
Default:
Context:http , server , location

该指令出现在版本 0.8.22 中。

到内存缓存服务器的传出连接源自具有可选端口(1.11.2)的指定本地 IP 地址。参数值可以包含变量(1.3.12)。特殊值off(1.3.12)取消了从以前的配置级别继承的memcached_bind指令的效果,这使系统可以自动分配本地 IP 地址和端口。

transparent参数(1.11.0)允许到内存缓存服务器的传出连接源自 nonlocalIP 地址,例如,源自客户端的真实 IP 地址:

memcached_bind $remote_addr transparent;

为了使此参数起作用,通常必须使用superuser特权运行 nginx worker 进程。在 Linux 上,不需要(1.13.8),就好像指定了transparent参数一样,辅助进程从主进程继承CAP_NET_RAW功能。还必须配置内核路由表以拦截来自 memcached 服务器的网络流量。

Syntax:memcached_buffer_size size;
Default:memcached_buffer_size 4k|8k;
Context:http , server , location

设置用于读取从 memcached 服务器接收的响应的缓冲区的size。收到响应后,该响应就会同步传递到客户端。

Syntax:memcached_connect_timeout time;
Default:memcached_connect_timeout 60s;
Context:http , server , location

定义用于与内存缓存服务器构建连接的超时。请注意,此超时通常不能超过 75 秒。

Syntax:memcached_force_ranges on | off;
Default:memcached_force_ranges off;
Context:http , server , location

该指令出现在版本 1.7.7 中。

启用对 Memcached 服务器的缓存和未缓存响应的字节范围支持,无论这些响应中的“ Accept-Ranges”字段如何。

Syntax:memcached_gzip_flag flag;
Default:
Context:http , server , location

该指令出现在版本 1.3.6 中。

对 Memcached 服务器响应中的flag是否存在启用测试,如果设置了该标志,则将“ Content-Encoding”响应 Headers 字段设置为“ gzip”。

Syntax:memcached_next_upstream error | timeout | invalid_response | not_found | off ...;
Default:memcached_next_upstream error timeout;
Context:http , server , location

指定在哪种情况下将请求传递到下一个服务器:

  • error

    • 与服务器构建连接,向服务器传递请求或读取响应头时发生错误;
  • timeout

    • 与服务器构建连接,向服务器传递请求或读取响应 Headers 时发生超时;
  • invalid_response

    • 服务器返回了空的或无效的响应;
  • not_found

    • 在服务器上未找到响应;
  • off

    • 禁用将请求传递到下一个服务器。

应该记住的是,只有在还没有任何内容发送给客户端的情况下,才有可能将请求传递给下一台服务器。即,如果在响应的传输过程中发生错误或超时,则无法解决该问题。

该指令还定义了与服务器通信的unsuccessful attempterrortimeoutinvalid_response的情况始终被认为是失败的尝试,即使未在指令中指定它们也是如此。绝不会将not_found的情况视为不成功的尝试。

将请求传递到下一个服务器可能受到尝试次数time的限制。

Syntax:memcached_next_upstream_timeout time;
Default:memcached_next_upstream_timeout 0;
Context:http , server , location

该指令出现在版本 1.7.5 中。

限制可以将请求传递到next server的时间。 0值关闭了此限制。

Syntax:memcached_next_upstream_tries number;
Default:memcached_next_upstream_tries 0;
Context:http , server , location

该指令出现在版本 1.7.5 中。

限制将请求传递到next server的可能尝试次数。 0值关闭了此限制。

Syntax:memcached_pass address;
Default:
Context:location , if in location

设置内存缓存服务器地址。该地址可以指定为域名或 IP 地址以及端口:

memcached_pass localhost:11211;

或作为 UNIX 域套接字路径:

memcached_pass unix:/tmp/memcached.socket;

如果一个域名解析为多个地址,则所有这些地址都将以循环方式使用。另外,可以将地址指定为server group

Syntax:memcached_read_timeout time;
Default:memcached_read_timeout 60s;
Context:http , server , location

定义一个超时,用于从 memcached 服务器读取响应。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。如果 memcached 服务器在这段时间内未传输任何内容,则连接将关闭。

Syntax:memcached_send_timeout time;
Default:memcached_send_timeout 60s;
Context:http , server , location

设置将请求传输到内存缓存服务器的超时时间。超时仅在两个连续的写操作之间设置,而不用于整个请求的传输。如果 memcached 服务器在这段时间内未收到任何信息,则连接将关闭。

Syntax:memcached_socket_keepalive on | off;
Default:memcached_socket_keepalive off;
Context:http , server , location

该指令出现在 1.15.6 版中。

为与 Memcached 服务器的传出连接配置“ TCP keepalive”行为。默认情况下,os 的设置对套接字有效。如果伪指令设置为值“ on”,则将为套接字打开SO_KEEPALIVE套接字选项。

Embedded Variables

$memcached_key

  • 定义用于从内存缓存服务器获取响应的密钥。