Map#
Creates variables whose values depend on values of other variables.
Configuration Example#
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;
}
Directives#
map#
Creates a new variable. Its value depends on the first parameter, specified as a string with variables, for example:
set $var1 "foo";
set $var2 "bar";
map $var1$var2 $new_variable {
default "foobar_value";
}
Here, the variable $new_variable will have a value
composed of the two variables $var1 and $var2,
or a default value if these variables are not defined.
Note
Since variables are evaluated only when they are used, the mere declaration even of a large number of "map" variables does not add any extra costs to request processing.
Parameters inside the map block specify a mapping between source and resulting values.
Source values are specified as strings or regular expressions.
Strings are matched ignoring the case.
A regular expression should either start with a ~ symbol for a case-sensitive matching, or with the ~* symbols for case-insensitive matching. A regular expression can contain named and positional captures that can later be used in other directives along with the resulting variable.
If a source value matches one of the names of special parameters described below, it should be prefixed with the \ symbol.
The resulting value can contain text, variable and their combination.
The following special parameters are also supported:
| sets the resulting value if the source value matches none of the specified variants. When default is not specified, the default resulting value will be an empty string. |
| indicates that source values can be hostnames with a prefix or suffix mask. This parameter should be specified before the list of values. |
For example,
*.example.com 1;
example.* 1;
The following two records
example.com 1;
*.example.com 1;
can be combined:
.example.com 1;
| includes a file with values. There can be several inclusions. |
| indicates that the variable is not cacheable. |
If the source value matches more than one of the specified variants, e.g. both a mask and a regular expression match, the first matching variant will be chosen, in the following order of priority:
String value without a mask
Longest string value with a prefix mask, e.g.
*.example.comLongest string value with a suffix mask, e.g.
mail.*First matching regular expression (in order of appearance in a configuration file)
Default value (
default)
map_hash_bucket_size#
Sets the bucket size for the map variables hash tables. Default value depends on the processor's cache line size. The details of setting up hash tables are provided separately.
map_hash_max_size#
Sets the maximum size of the map variables hash tables. The details of setting up hash tables are provided separately.