前面的博客介绍了如何通过重新编译nginx,从而加载geoip2模块。还有简单的使用案例。
传送门:nginx-配置GeoIP2模块获取地域信息
接下来将继续介绍geoip2模块的详细参数和变量配置规则。
http {
...
geoip2 /etc/maxmind-country.mmdb {
auto_reload 5m;
$geoip2_metadata_country_build metadata build_epoch;
$geoip2_data_country_code default=US source=$variable_with_ip country iso_code;
$geoip2_data_country_name country names en;
}
geoip2 /etc/maxmind-city.mmdb {
$geoip2_data_city_name default=London city names en;
}
....
fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param CITY_NAME $geoip2_data_city_name;
....
}
stream {
...
geoip2 /etc/maxmind-country.mmdb {
$geoip2_data_country_code default=US source=$remote_addr country iso_code;
}
...
}
geoip2模块可以配置在http和stream下。
启用自动重新加载将使 nginx 以指定的时间间隔检查数据库的修改时间,如果发生更改则重新加载。
auto_reload
检索有关 geoip 数据库的元数据。
格式
$variable_name metadata
如示例中“$geoip2_metadata_country_build metadata build_epoch;”。是将maxmind数据库的构建时间戳的值,赋值给变量“$geoip2_metadata_country_build”,后面在nginx中就可以使用变量“$geoip2_metadata_country_build”。
格式
$variable_name [default=
mmdblookup这个命令在安装geoip2依赖--libmaxminddb时就会被一起装上。
源码包路径:libmaxminddb-1.6.0/bin/mmdblookup
-f,--file 指定mmdb数据库文件路径
-i,--ip 指定要查找的ip
-v,--verbose 打印详细输出。具体来说,这会导致此应用程序输出数据库元数据。
--version 显示版本
-h,-?,--help 帮助文档
(不提供查找路径时)
[root@10-10-10-10 cofigure]# mmdblookup --file GeoLite2-Country.mmdb --ip 10.10.10.10
{
"names": {
"en": "Germany",
"de": "Deutschland"
},
"cities": [ "Berlin", "Frankfurt" ]
}
可以通过使用以下查找路径调用 mmdblookup 来查找英文名称:
mmdblookup --file ... --ip ... names en
数组编号从零 (0) 开始。可以使用以下命令查找列表中的第二个城市:
mmdblookup --file ... --ip ... cities 1
http {
......
#geoip2模块加载Country数据库,并且配置自定义变量
geoip2 /etcd/nginx/conf/GeoLite2-Country.mmdb {
$geoip2_country_code default=unknow source=$http_x_forwarded_for country iso_code;
$geoip2_country_name default=unknow source=$http_x_forwarded_for country names en;
}
#geoip2模块加载City数据库,并且配置自定义变量
geoip2 /etcd/nginx/conf/GeoLite2-City.mmdb {
$geoip2_data_city_name default=unknow source=$http_x_forwarded_for city names en;
$geoip2_data_city_subdivisions default=unknow source=$http_x_forwarded_for subdivisions 0 names en;
}
location /myip {
default_type application/json;
return 200 '{"ip":$http_x_forwarded_for,"countryCode":"$geoip2_country_code","countryName":"$geoip2_country_name","citySubdivisions":"$geoip2_data_city_subdivisions","cityName":"$geoip2_data_city_name"};';
}
......
}
解析:
以$geoip2_data_city_subdivisions source=$http_x_forwarded_for subdivisions 0 names en;为例
$geoip2_data_city_subdivisions:为自定义变量名
default:当ip在数据库中没有查到时,变量的值为default的值。如果未定义defualt,值则为空。
source:定义ip的值来自于哪里。默认为$remote_addr
subdivisions 0 names en:剩下的都属于示例中的“path”,这个路径是根据mmdblookup返回的json数据来填写的。
{
"subdivisions":
[
{
"geoname_id":
1809935
"iso_code":
"GD"
"names":
{
"en":
"Guangdong"
"fr":
"Province de Guangdong"
"zh-CN":
"广东"
}
}
]
}
https://github.com/chinagoldline/ngx_http_geoip2_modulehttps://github.com/chinagoldline/ngx_http_geoip2_modulemmdblookup - a utility to look up an IP address in a MaxMind DB filehttps://maxmind.github.io/libmaxminddb/mmdblookup.html