nginx模块 ngx_http_map_module

2018-07-18 14:58:22

ngx_http_map_module 模块可以根据一个变量生成另一个变量。

Syntax:	map string $variable { ... }
Default: —
Context: http

nginx 的变量是在使用的时候才会去计算生成,所以就算有很多变量也不会影响性能。

string  匹配的时候忽略大小写。~ 大小写敏感正则,~* 大小写不敏感正则。

下面是一些特殊参数的意思:

default value  如果都没匹配,则设置该值,如果没设置默认也没匹配,则结果为空字符串。

hostnames  开启前后缀语法支持。

*.freecls.com 1;
freecls.* 2;

#以下2个可以合并为一个。
freecls.com   1;
*.freecls.com 1;

.freecls.com

include file  包含文件里的值。

volatile  表明变量不缓存。

如果有多个值匹配到,那么会按照如下顺序取值:

1.精确字符串匹配。
2.最长的前缀匹配如 *.freecls.com。
3.最长的后缀匹配如 freecls.* 。
4.正则匹配到的第一个(按照出现的顺序)。
5.默认值。

Syntax:	map_hash_bucket_size size;
Default: map_hash_bucket_size 32|64|128;
Context: http

设置 bucket 大小给 map 变量的哈希表。默认为cpu缓存行。

Syntax:	map_hash_max_size size;
Default: map_hash_max_size 2048;
Context: http

设置哈希表的最大大小。

最后两个配置跟hash表有关,一般用户无需配置,读过源码的朋友可以尝试着优化。

map $http_user_agent $m{
    default 0;
			  
    "~^curl" curl;			  
    "~*chrome" google;			  
    "~*iphone" iphone;			  
}

上面配置的意思是,根据web客户端的请求头 User-Agent 里的值来决定 $m 变量的值。


 备注

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


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