Nginx map模块
Posted On 2019年5月22日 By liang
Map模块,通过映射新变量提供更多的可能性;ngx_http_map_module, 默认已编译进nginx 可通过–without-http_map_module禁用。
功能:基于已有变量,使用类似于switch { case: … default: … } 的语法创建新变量,为其他基于变量值实现功能的模块提供更多的可能性。
map 模块指令
Syntax: map string $variable { ... }
Default: ---
Context: http
注释:
string 可以是变量,也可以是字符串
$variable 提供的新变量,根据{}中的匹配规则,给新变量赋值。
Syntax: map_hash_bucket_size size;
Default: map_hash_bucket_size 32|64|128;
Context: http
Syntax: map_hash_max_size size;
Default: map_hash_max_size 2048;
Context: http
规则:
已有变量
1、字符串
2、一个或多个变量
3、变量与字符串组合
case 规则
1、字符串严格匹配
2、使用hostnames指令,可以对域名使用前缀*泛域名匹配
3、使用hostnames指令,可以对域名使用后缀*泛域名匹配
4、~和~* 正则表达式匹配,后者忽略大小写
default 规则
1、没有匹配到任何规则时,使用default
2、缺失default时,返回空字符串给新变量
其他
1、使用include语法提升可读性
2、使用volatile禁止变量值缓存
配置示例:
map $http_host $name {
hostnames;
default 0;
www.pmworker.cn 1
*.pmworker.cn 2;
}
map $http_user_agent $mobile {
default 0;
"~Opera Mini" 1;
}