示例配置
map $remote_addr $limit { 127.0.0.1 ""; default $binary_remote_addr; } limit_conn_zone $limit zone=addr:10m; limit_conn addr 1;
map
语法:map string $variable { … }
默认:—
上下文:stream
创建新变量,其值依赖于指定在第一个参数中的一个或多个源变量。
由于变量只有在使用的时候会被计算,可以声明一个很大的变量映射表,而不会带来连接的额外开销。
在map块中的参数指定了一个源与结果值之间的映射关系。
源值定义为字符串或正则表达式。
字符串匹配忽略大小写。
正则表达式可以以“~”标识起始,表示大小写敏感的匹配,也可以以“~*”标识起始,表示大小写不敏感的匹配。一个正则表达式可以包含名称和位置捕获,稍后可以用于其他指令。
如果源值匹配任一个下面描述的特殊参数名,需要用“\”标识作为前缀。
结果值可以包含文本、变量以及它们的混合。
指令可以支持三种特殊参数:
default value
如果源值不匹配任何指定的变量,设置结果值。当没有指定default时,默认结果值是一个空字符串。
hostnames
表明源值可以是带前缀或后缀的主机名:
*.example.com 1; example.* 1;
下面两个记录:
example.com 1; *.example.com 1;
可以合并为:
.example.com 1;
该参数需要在列表值之前指定。
include file
包含一个含值的文件,可以有多个包含。
如果源值匹配超过一个定义的变量,例如同时匹配一个标记和正则表达式,先匹配的变量会被选中,按照下面的优先级:
- 没有标记的字符串值
- 最长的前缀标记字符串,例如“*.example.com”
- 最长的后缀标记字符串,例如“mail.*”
- 第一个匹配的正则表达式(按出现在配置文件中的顺序)
- 默认值
map_hash_bucket_size
语法:map_hash_bucket_size size
默认:map_hash_bucket_size 32|64|128
上下文:stream
为映射变量哈希表设置一个桶的大小。默认大小取决于处理器的缓存行大小。
map_hash_max_size
语法:map_hash_max_size size
默认:map_hash_max_size 2048
上下文:stream
设置变量映射哈希表的最大大小。