nginx中文文档-ngx_http_geoip_module

此页面版本:2016-06-08
ngx_http_geoip_module模块(0.8.6+)创建基于客户端IP的变量,并使用预编译的MaxMind数据库。

当使用支持IPv6的数据库(1.3.12+,1.2.7+)时,IPv4地址会显示为IPv4映射的IPv6地址。
该模块默认不会构建,需要用–with-http_geoip_module编译参数。
该模块需要MaxMind GeoIP库。

示例配置

http {
    geoip_country         GeoIP.dat;
    geoip_city            GeoLiteCity.dat;
    geoip_proxy           192.168.100.0/24;
    geoip_proxy           2001:0db8::/32;
    geoip_proxy_recursive on;
    ...

geoip_country

语法:geoip_country file
默认:—
上下文:http

指定一个数据库用于指定依赖于客户端IP地址的国家。下面的变量在使用数据库时可用:

$geoip_country_code
两个字母的国家代码,例如“RU”,“US”

$geoip_country_code3
三个字母的国家代码,例如“RUS”,“USA”

$geoip_country_name
国家名称,例如“Russian Federation”,“United States”

geoip_city

语法:geoip_city file
默认:—
上下文:http

指定一个数据库,用于决定依赖于客户端IP地址的国家、地区、城市信息。下面的变量在使用数据库时可用:

$geoip_area_code
电话区号(仅美国)
该变量由于相应的数据库会过时,所以信息可能过时。


$geoip_city_continent_code
两字母的大陆代码,如“EU”,“NA”


$geoip_city_country_code
两字母的国家代码,如“RU”,“US”


$geoip_city_country_code3
三字母的国家代码,如“RUS”,“USA”


$geoip_city_country_name
国家名,例如“Russian Federation”,“United States”


$geoip_dma_code
美国DMA地区代码(亦称“地铁代码”),依据Google AdWords API geotargeting


$geoip_latitude
纬度


$geoip_longitude
经度


$geoip_region
两标识符的国家区域代码(区域、范围、州、省、联邦),例如“48”、“DC”


$geoip_region_name
国家区域名(区域、范围、州、省、联邦),例如“Moscow City”,“District of Columbia”


$geoip_city
城市名,例如“Moscow”,“Washington”


$geoip_postal_code
邮政编码

geoip_org

语法:geoip_org file
默认:—
上下文:http
版本:1.0.3+

指定数据库用于决定依赖于客户端IP地址的机构。下面的变量在使用数据库时可用:

$geoip_org
组织名,例如“The University of Melbourne”

geoip_proxy

语法:geoip_proxy address | CIDR
默认:—
上下文:http
版本:1.3.0+,1.2.1+

定义可信地址。当请求来自于可信地址,将会使用请求头中的“X-Forwarded-For”。

geoip_proxy_recursive

语法:geoip_proxy_recursive on | off
默认:geoip_proxy_recursive off
上下文:http
版本:1.3.0+,1.2.1+

如果递归查询禁用,“X-Forwarded-For”中最后一个地址将被使用。
如果递归查询启用,会用“X-Forwarded-For”中最后一个不可信地址。

nginx中文文档-ngx_http_geo_module

ngx_http_geo_module创建取值依赖于客户端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 { … }
默认:—
上下文: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;
}