nginx的map模块
# 介绍
ngx_http_map_module (opens new window)模块主要提供了一种值映射能力。
由于仅在使用变量时才对其进行计算,因此即使是大量
map
变量的声明也不会增加请求处理的任何额外成本。
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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 基本使用
# 基本语法
Syntax: | map string $variable { ... } |
---|---|
Default: | — |
Context: | http |
- 源值为字符串或者正则
- 字符串匹配忽略大小写。
- 正则表达式以“
~
”符号开始则会区分大小写匹配,或者从“~*
”符号开始进行不区分大小写的匹配。正则表达式可以包含命名和位置捕获,这些捕获随后可以与结果变量一起在其他指令中使用。 - 结果值可以包含文本、变量及其组合。
# 特殊参数
# 默认值
如果源值不匹配任何指定的变体,则设置结果值。如果default
未指定,则默认结果值为空字符串。
default value
1
# hostnames
表示源值可以是带有前缀或后缀掩码的主机名:
*.example.com 1;
example.* 1;
1
2
2
以下两条记录
example.com 1;
*.example.com 1;
1
2
2
可以组合:
.example.com 1;
1
此参数应在源值列表之前指定。
map $http_host $name {
hostnames;
example.com 1;
*.example.com 1;
}
1
2
3
4
5
6
2
3
4
5
6
# include
包含一个带有值的文件。可以有几个夹杂物。
include file
1
# 禁用缓存
表示该变量不可缓存
map $http_host $name {
hostnames;
}
1
2
3
4
2
3
4
# 匹配优先级
如果源值匹配多个指定变体,例如通配符和正则表达式都匹配,将选择第一个匹配的变体。按照以下优先级匹配
- 不带通配符的字符串值
- 带有前缀通配符的最长字符串值,例如
*.example.com
- 带有后缀通配符的最长字符串值,例如
mail.*
- 第一个匹配的正则表达式(在配置文件中的出现顺序)
- 默认值
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11