模块 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; }