map
This module allows you to classify, or map a set of values into a different set of values and store the result in a variable.
Example:
map $http_host $name {
hostnames;
default 0;
example.com 1;
*.example.com 1;
test.com 2;
*.test.com 2;
.site.com 3;
}
One use for this would be to use a mapping in place of writing lots of server/location directives or redirects:
map $uri $new {
default http://www.domain.com/home/;
/aa http://aa.domain.com/;
/bb http://bb.domain.com/;
/john http://my.domain.com/users/john/;
}
server {
server_name www.domain.com;
rewrite ^ $new redirect;
}
指令
map
syntax:*map $var1 $var2 { … }*
default:*none*
context:*http*
map defines the mapping table which will be used to set a variable. There are three special parameters:
- default — defines the value to be used where no match is found.
- hostnames — it allows for an easier matching of values like host names, names with a starting dot may match exact host names and host names ending with the value, for example:
*.example.com 1;
Instead of two entries
example.com 1;
*.example.com 1;
we can use only one
.example.com 1;
syntax:*map_hash_max_size number*
default:*map_hash_max_size 2048*
context:*http*
The directive sets the maximum size of a hash table to hold the variable map. For more details see the descriptions of hash settings Optimization section .
map_hash_bucket_size
syntax:*map_hash_bucket_size n*
default:*map_hash_bucket_size 32/64/128*
context:*http*
The directive sets the maximum size in a hash table to map variables. The default value depends on the size of the cache line processor. More see in the descriptions of hash settings in the Optimization section .
References
原文: https://wizardforcel.gitbooks.io/nginx-doc/content/Text/3.18_map.html