这些模块默认会全部编译进Nginx,除非手工指定某个模块在configure时排除。
这个模块允许你分类或者同时映射多个值到多个不同值并储存到一个变量中,map指令用来创建变量,但是仅在变量被接受的时候执行视图映射操作,对于处理没有引用变量的请求,这个模块并没有性能上的缺失。
如下例:
map $http_host $name { hostnames; default 0; example.com 1; *.example.com 1; test.com 2; *.test.com 2; .site.com 3;}
一个典型的使用映射的例子是代替一个含有很多服务器的/location或者重定向:
map $uri $new { default http://www.domain.com/home/; /aa http://aa.domain.com/; /bb http://bb.domain.com/; ^/cc/(?P<suffix>.*)$ http://cc.domain.com/$suffix; /john http://my.domain.com/
users/john/;}
指令
map
语法:map $var1 $var2 { … }
默认值:none
使用字段:http
map为一个变量设置的映射表。
映射表由两列组成,匹配模式和对应的值,匹配模式可以是一个简单的字符串或者正则表达式,使用正则表达式要用('~')
map $uri $myvalue { /aa /mapped_aa; ~^/aa/(?<suffix>.*)$ /mapped_bb/$suffix;}
如果有一个以波浪号开头的字符串,但是其并不是一个正则表达式,可以是用反斜杠 ('\'):
map $http_referer $myvalue { Mozilla 1234; \~Mozilla 5678;}
map指令有三个指定的参数:
default - 指定如果没有匹配结果将使用的默认值。 hostnames - 允许对类似
主机名的值进行简单的查询匹配,第一个点后面的部分将用作精确的主机名。
例如:*.example.com 1;
而不是写成两个:
example.com 1;*.example.com 1;
可以只写成一条:
.example.com 1; include - 包含一个含有映射值的文件,可以包含多个。
map_hash_max_size
语法:map_hash_max_size number
默认值:map_hash_max_size 2048
使用字段:http
这个指令设置映射表对应的哈希表的最大值,更多信息可以参考nginx部分优化。
map_hash_bucket_size
语法:map_hash_bucket_size n
默认值:map_hash_bucket_size 32/64/128
使用字段:http
这个指令指定一个映射表中的变量在哈希表中的最大值,这个值取决于处理器的缓存,更多信息可以参考nginx部分优化。