示例配置
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 { … }
默认:—
上下文:http
描述客户端IP地址变量取值的依赖。默认情况下,地址从$remote_addr变量中获取,但可以指定为其他的变量(0.7.27+),例如:
geo $arg_remote_addr $geo { ...; }
由于只有当变量使用时才会计算,即使geo声明了很多,也不会对请求处理有额外的开销。
如果变量的值非法,则会用“255.255.255.255”这个地址。
地址可以定义为CIDR形式也可以是范围形式(0.7.23+)。
IPv6前缀从1.3.10和1.2.7版本开始支持。
以下特殊的参数也是支持的:
delete
删除指定的网络(0.7.23+)
default
当客户端地址不匹配任何地址时的值。当地址用CIDR形式定义时,“0.0.0.0/0”和“::/0”可以用来代替default。当default没有定义时,默认值为一个空字符串。
include
包含保存地址和值的文件,可以由多个包含。
proxy
定义可信的地址(0.8.7+,0.7.63+)。当请求从可信地址上发来,会从请求头的“X-Forwarded-For”字段中取值。信任的地址按顺序检查。
IPv6的支持从1.3.0和1.2.1版本开始。
proxy_recursive
启动递归地址搜索(1.3.0+,1.2.1+)。如果递归查询禁用,会用“X-Forwarded-For”中的最后一个地址,否则会用“X-Forwarded-For”中最后一个不可信的地址。
ranges
声明地址定义为范围(0.7.23+),该参数应在第一个出现。为提高加载数据的速度,地址应使用升序排列。
例子:
geo $country { default ZZ; include conf/geo.conf; delete 127.0.0.0/16; proxy 192.168.100.0/24; proxy 2001:0db8::/32; 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; }