模块 ngx_stream_geo_module
| 示例配置 指令 geo |
模块 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 [ |
|---|---|
| 默认: | — |
| 上下文: | stream |
描述了指定变量的值与客户端 IP 地址的依赖关系。默认情况下,地址取自 $remote_addr 变量,但也可以取自另一个变量,例如:
geo $arg_remote_addr $geo {
...;
}
由于变量仅在使用时计算,即使声明了大量的“geo”变量,也不会导致连接处理的额外成本。
如果变量的值不表示有效的 IP 地址,则使用“255.255.255.255” 地址。
地址可以指定为 CIDR 记法中的前缀(包括单个地址)或范围。
还支持以下特殊参数:
-
delete - 删除指定的网络。
-
default -
如果客户端地址与指定的任何地址都不匹配,则设置为变量的值。当以 CIDR 记法指定地址时,可以使用“
0.0.0.0/0” 和 “::/0” 代替default。当未指定default时,默认值将为空字符串。 -
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;
}
