示例配置
map $http_host $name { hostnames; default 0; example.com 1; *.example.com 1; example.org 2; *.example.org 2; .example.net 3; wap.* 4; } map $http_user_agent $mobile { default 0; "~Opera Mini" 1; }
map
语法:map string $variable { … }
默认:—
上下文:http
创建一个值依赖于第一个参数定义的变量值的变量。
在0.9.0版本之前,第一个参数只可定义一个变量。
由于变量只有在使用时取值,定义很多“map”变量并不会对请求的处理增加任何额外的开销。
在map块中的参数定义了一个源到结果的映射值。
源值定义为字符串或正则表达式(0.9.6+)
字符串匹配忽略大小写。
正则表达式可以以“~”标识开头表示大小写敏感,也可以以“~*”标识(1.0.4+)开头表示大小写不敏感。正则表达式可以包括名称和位置捕获,可在其他的指令中使用。
如果原值匹配下面描述的特殊参数名称之一,应该用“\”前缀。
结果值可以是字符串或另一个变量(0.9.0+)
指令可以支持三个特殊参数:
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
上下文:http
设置映射变量哈希表桶的大小。默认大小取决于处理器的缓存行大小。
map_hash_max_size
语法:map_hash_max_size size
默认:map_hash_max_size 2048
上下文:http
设置映射变量哈希表的总大小。