Module ngx_http_memcached_module
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_allow_upstream |
|---|---|
| 默认值 | — |
| 作用域 |
http, server, location |
该指令出现在 1.29.3 版本中。
定义允许或拒绝访问 memcached 服务器的条件。如果所有字符串参数都不为空且不等于“0”,则允许访问。条件会在每次建立 memcached 服务器连接之前进行评估。参数值可以包含变量。
geo $upstream_last_addr $allow {
volatile;
10.10.0.0/24 1;
}
server {
listen 127.0.0.1:8080;
location / {
memcached_pass host:11211;
memcached_allow_upstream $allow;
...
}
}
该指令是我们的商业订阅的一部分。
| 语法 |
memcached_bind |
|---|---|
| 默认值 | — |
| 作用域 |
http, server, location |
该指令出现在 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_bind_dynamic |
|---|---|
| 默认值 |
memcached_bind_dynamic off; |
| 作用域 |
http, server, location |
该指令出现在 1.29.3 版本中。
启用后,会在每次连接尝试时执行 bind 操作。
该指令是我们的商业订阅的一部分。
| 语法 |
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_gzip_flag |
|---|---|
| 默认值 | — |
| 作用域 |
http, server, location |
该指令出现在 1.3.6 版本中。
启用对 memcached 服务器响应中 flag 是否存在的测试,如果设置了该标志,则将“Content-Encoding”响应头字段设置为“gzip”。
| 语法 |
memcached_next_upstream |
|---|---|
| 默认值 |
memcached_next_upstream error timeout; |
| 作用域 |
http, server, location |
指定在何种情况下请求应传递给下一台服务器:
error- 在与服务器建立连接、向其传递请求或读取响应头部时发生错误;
timeout- 在与服务器建立连接、向其传递请求或读取响应头部时发生超时;
denied- 服务器拒绝了连接(1.29.3);
此参数是我们商业订阅的一部分。
invalid_response- 服务器返回了空响应或无效响应;
not_found- 在服务器上未找到响应;
off- 禁止将请求传递给下一台服务器。
应该记住,只有在尚未向客户端发送任何内容的情况下,才可能将请求传递给下一台服务器。也就是说,如果错误或超时发生在传输响应的过程中,则无法修复。
该指令还定义了什么被视为与服务器通信的不成功尝试。error、timeout、denied 和 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 in 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 版本中。
为发往 memcached 服务器的传出连接配置“TCP keepalive”行为。默认情况下,套接字采用操作系统的设置。如果指令值设置为“on”,则为套接字开启 SO_KEEPALIVE 套接字选项。
嵌入式变量
$memcached_key- 定义用于从 memcached 服务器获取响应的键。