nginx中文文档-ngx_stream_geo_module

此页面版本:2016-08-10,57ab4631-be8
ngx_stream_geo_module模块(1.11.3+)根据客户端IP地址创建变量。

示例配置:

geo $geo {
    default        0;

    127.0.0.1      2;
    192.168.1.0/24 1;
    10.1.0.0/16    1;

    ::1            2;
    2001:0db8::/32 1;
}

geo

语法:geo [$address] $variable { … }
默认:—
上下文:stream

描述指定变量的值与客户端IP地址之间的依赖关系。默认情况下,地址从$remote_addr变量中获取,但是它可以从另外的变量中获取,例如:

geo $arg_remote_addr $geo {
    ...;
}

由于变量在使用时才会解析,可以在geo中声明一个很大的变量映射表,不会引起任何额外的开销。
如果变量的值不是一个合法的IP地址,则使用“255.255.255.255”。
地址可以指定为CIDR地址块格式,也可以为范围。
下面特殊的参数同样受支持:
delete
删除指定的网络。

default
为那些没有匹配任何指定IP地址的客户端地址设置一个默认值。当地址是以CIDR方式指定,“0.0.0.0/0”和“::/0”用于替换默认值。当默认值没有指定,则默认值为空字符串。

include
包含一个含有地址和值的文件。可以有多个包含。

ranges
声明地址定义为一个范围。这个参数应该在最先出现。为了加快载入的速度,地址应该以升序排列。

例子:

geo $country {
    default        ZZ;
    include        conf/geo.conf;
    delete         127.0.0.0/16;

    127.0.0.0/24   US;
    127.0.0.1/32   RU;
    10.1.0.0/16    RU;
    192.168.1.0/24 UK;
}

conf/geo.conf文件包含以下内容:

10.2.0.0/16    RU;
192.168.2.0/24 RU;

最匹配的值将被使用。例如,地址127.0.0.1会使用“RU”,而不是“US”。

带范围的例子:

geo $country {
    ranges;
    default                   ZZ;
    127.0.0.0-127.0.0.0       US;
    127.0.0.1-127.0.0.1       RU;
    127.0.0.1-127.0.0.255     US;
    10.1.0.0-10.1.255.255     RU;
    192.168.1.0-192.168.1.255 UK;
}

nginx中文文档-ngx_stream_map_module

此页面版本:2016-07-05,577bcc35-cc0
ngx_stream_map_module 模块(1.11.2+)创建变量,其值取决于其他变量的值。

示例配置

map $remote_addr $limit {
    127.0.0.1    "";
    default      $binary_remote_addr;
}

limit_conn_zone $limit zone=addr:10m;
limit_conn addr 1;

map

语法:map string $variable { … }
默认:—
上下文:stream

创建新变量,其值依赖于指定在第一个参数中的一个或多个源变量。
由于变量只有在使用的时候会被计算,可以声明一个很大的变量映射表,而不会带来连接的额外开销。
在map块中的参数指定了一个源与结果值之间的映射关系。
源值定义为字符串或正则表达式。
字符串匹配忽略大小写。
正则表达式可以以“~”标识起始,表示大小写敏感的匹配,也可以以“~*”标识起始,表示大小写不敏感的匹配。一个正则表达式可以包含名称和位置捕获,稍后可以用于其他指令。
如果源值匹配任一个下面描述的特殊参数名,需要用“\”标识作为前缀。
结果值可以包含文本、变量以及它们的混合。
指令可以支持三种特殊参数:
default value
如果源值不匹配任何指定的变量,设置结果值。当没有指定default时,默认结果值是一个空字符串。

hostnames
表明源值可以是带前缀或后缀的主机名:

*.example.com 1;
example.*     1;

下面两个记录:

example.com   1;
*.example.com 1;

可以合并为:

.example.com  1;

该参数需要在列表值之前指定。

include file
包含一个含值的文件,可以有多个包含。

如果源值匹配超过一个定义的变量,例如同时匹配一个标记和正则表达式,先匹配的变量会被选中,按照下面的优先级:

  1. 没有标记的字符串值
  2. 最长的前缀标记字符串,例如“*.example.com”
  3. 最长的后缀标记字符串,例如“mail.*”
  4. 第一个匹配的正则表达式(按出现在配置文件中的顺序)
  5. 默认值

map_hash_bucket_size

语法:map_hash_bucket_size size
默认:map_hash_bucket_size 32|64|128
上下文:stream

为映射变量哈希表设置一个桶的大小。默认大小取决于处理器的缓存行大小。

map_hash_max_size

语法:map_hash_max_size size
默认:map_hash_max_size 2048
上下文:stream

设置变量映射哈希表的最大大小。