模块 ngx_http_memcached_module

示例配置
指令
     memcached_bind
     memcached_buffer_size
     memcached_connect_timeout
     memcached_gzip_flag
     memcached_next_upstream
     memcached_next_upstream_timeout
     memcached_next_upstream_tries
     memcached_pass
     memcached_read_timeout
     memcached_send_timeout
     memcached_socket_keepalive
嵌入变量

ngx_http_memcached_module 模块用于从 Memcached 服务器获取响应。键值存储在 $memcached_key 变量中。响应应事先通过 nginx 外部的机制放入 Memcached 中。

示例配置

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 地址 [transparent ] | off;
默认值
上下文 httpserverlocation

此指令出现在 0.8.22 版本中。

使发往 Memcached 服务器的连接起源于指定的本地 IP 地址和可选端口 (1.11.2)。参数值可以包含变量 (1.3.12)。特殊值 off (1.3.12) 取消从先前配置级别继承的 memcached_bind 指令的效果,这允许系统自动分配本地 IP 地址和端口。

transparent 参数 (1.11.0) 允许发往 Memcached 服务器的连接起源于非本地 IP 地址,例如,客户端的真实 IP 地址。

memcached_bind $remote_addr transparent;

为了使此参数生效,通常需要使用 超级用户 权限运行 Nginx 工作进程。在 Linux 上,这不是必需的 (1.13.8),因为如果指定了 transparent 参数,工作进程将从主进程继承 CAP_NET_RAW 功能。还需要配置内核路由表以拦截来自 Memcached 服务器的网络流量。

语法 memcached_buffer_size 大小;
默认值
memcached_buffer_size 4k|8k;
上下文 httpserverlocation

设置用于读取从 Memcached 服务器接收到的响应的缓冲区 大小。响应在接收到后立即同步传递给客户端。

语法 memcached_connect_timeout 时间;
默认值
memcached_connect_timeout 60s;
上下文 httpserverlocation

定义与 Memcached 服务器建立连接的超时时间。需要注意的是,此超时时间通常不能超过 75 秒。

语法 memcached_gzip_flag 标志;
默认值
上下文 httpserverlocation

此指令出现在 1.3.6 版本中。

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

语法 memcached_next_upstream error | timeout | invalid_response | not_found | off ...;
默认值
memcached_next_upstream error timeout;
上下文 httpserverlocation

指定在哪些情况下应将请求传递给下一个服务器。

error
与服务器建立连接、传递请求或读取响应头时发生错误;
timeout
与服务器建立连接、传递请求或读取响应头时发生超时;
invalid_response
服务器返回空响应或无效响应;
not_found
在服务器上找不到响应;
off
禁用将请求传递给下一个服务器。

需要注意的是,只有在尚未向客户端发送任何内容的情况下,才能将请求传递给下一个服务器。也就是说,如果在响应传输过程中发生错误或超时,则无法修复此问题。

该指令还定义了什么是与服务器通信的 不成功尝试errortimeoutinvalid_response 的情况始终被视为不成功尝试,即使它们未在指令中指定。not_found 的情况从不被视为不成功尝试。

将请求传递给下一个服务器可以受 尝试次数时间 的限制。

语法 memcached_next_upstream_timeout 时间;
默认值
memcached_next_upstream_timeout 0;
上下文 httpserverlocation

此指令出现在 1.7.5 版本中。

限制可以将请求传递给 下一个服务器 的时间。0 值关闭此限制。

语法 memcached_next_upstream_tries 数字;
默认值
memcached_next_upstream_tries 0;
上下文 httpserverlocation

此指令出现在 1.7.5 版本中。

限制将请求传递给 下一个服务器 的可能尝试次数。0 值关闭此限制。

语法 memcached_pass 地址;
默认值
上下文 locationif in location

设置 Memcached 服务器地址。地址可以指定为域名或 IP 地址,以及端口。

memcached_pass localhost:11211;

或作为 UNIX 域套接字路径。

memcached_pass unix:/tmp/memcached.socket;

如果域名解析为多个地址,则所有地址都将以循环方式使用。此外,地址可以指定为 服务器组

语法 memcached_read_timeout 时间;
默认值
memcached_read_timeout 60s;
上下文 httpserverlocation

定义从 Memcached 服务器读取响应的超时时间。超时时间仅在两个连续的读取操作之间设置,而不是针对整个响应的传输。如果 Memcached 服务器在此时间内未传输任何内容,则连接将关闭。

语法 memcached_send_timeout 时间;
默认值
memcached_send_timeout 60s;
上下文 httpserverlocation

设置将请求传输到 Memcached 服务器的超时时间。超时时间仅在两个连续的写入操作之间设置,而不是针对整个请求的传输。如果 Memcached 服务器在此时间内未接收任何内容,则连接将关闭。

语法 memcached_socket_keepalive on | off;
默认值
memcached_socket_keepalive off;
上下文 httpserverlocation

此指令出现在 1.15.6 版本中。

配置发往 Memcached 服务器的连接的“TCP 保活”行为。默认情况下,操作系统的设置对套接字有效。如果指令设置为“on”值,则将为套接字打开 SO_KEEPALIVE 套接字选项。

嵌入变量

$memcached_key
定义从 Memcached 服务器获取响应的键。