nginx模块 ngx_http_memcached_module

2018-07-18 16:57:45

ngx_http_memcached_module 模块可以通过指定的 key 从memcached 服务器获取数据返回给客户端。

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

指定从哪个ip地址来访问 memcached 服务器。

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

读取 memcached 服务器的内容缓冲区大小,内容只要一收到就会立马发送给客户端。

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

连接 memcached 服务器的超时时间,不能大于 75秒。

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

是否开启范围请求支持对于从服务器返回的缓存的或非缓存的响应。而忽略 Accept-Ranges 响应头。

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

在响应头里带上 Content-Encoding: gzip 。

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

用来决定在什么情况下才发给下一个服务器。

error  当建立连接,发送请求,或者读取响应头出错时。

timeout  当建立连接,发送请求,或者读取响应头超时。

invalid_response  服务器返回空或者无效响应。

not_found  无法找到。

off  禁用发送请求到下一个服务器。

需要注意的是,上面的前提是还没有发送任意数据到客户端。

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

多少时间内可以发送请求到下一个服务器,0不限制。

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

限制尝试多少次去发送请求给下一个服务器,0关闭限制。

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

设置服务器地址和端口,可以是ip地址和端口,也可以是unix domain socket。

memcached_pass localhost:11211;

memcached_pass unix:/tmp/memcached.socket;

当然也可以是一组服务器,默认的访问模式为轮询。

upstream memcached {
    server 127.0.0.1:11211;
    server 127.0.0.1:11212;
    server 127.0.0.1:11213;
    server 127.0.0.1:11214;
}

...

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

向 memcached 服务器读取超时时间,超时了就关闭连接。

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

向 memcached 服务器发送请求的超时时间,超时则关闭连接。

内置变量

$memcached_key  用来从 memcached 服务器获取响应。


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

location @fallback {
    root html/error;
}

假设我们nginx服务器地址为 192.168.1.10,此时我们发送如下请求,那么nginx会向 memcached 索取 key为 /index.html?name=dd的值,显然目前还没有,那么会内部跳转到 location @fallback。

[root@localhost nginx]# cat html/error/index.html 
error 404

[root@localhost nginx-1.14.0]# curl localhost/index.html?name=dd
error 404

此时我们在 192.168.1.202 服务器上设置memcached 值。

[root@192 ~]# socat - tcp:127.0.0.1:11211,crnl
set /index.html?name=dd 0 900 7
freecls
STORED

此时在 192.168.1.10 上在此测试,已经返回正确的值。

[root@localhost nginx]# curl localhost/index.html?name=dd
freecls


 备注

1.测试环境centos7 64位,nginx版本为 1.14.0。
2.读者也可以参考官方文档 nginx documentation
3..原文地址http://www.freecls.com/a/2712/c5


©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。