前文:
最近在研究nginx如何集成geo模块来实现IP自动识别从而进行地区屏蔽的内容。但是度娘N篇文章,发现大家都在转载很久之前的东西。geo1.0官方都不提供下载了,不知道那些小伙伴是怎么实现模块按照和IP库下载的。这个就不互相伤害了,如何集成最新版的geoip2直接继续浏览即可。
1.nginx下载最新版
过程略。
2.下载依赖软件
2.1 geoip2核心识别库
安装步骤:
wget https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz
tar -xzf libmaxminddb-1.3.2.tar.gz
cd libmaxminddb-1.3.2
./configure
make
make check
sudo make install
sudo ldconfig
2.2 geoip2-nginx模块
下载地址:
https://github.com/TravelEngineers/ngx_http_geoip2_module
nginx集成步骤:
./configure --prefix=/appx/nginx-geoip --with-http_stub_status_module --with-pcre=/appx/nginx-geoip/source/pcre-8.38 --with-http_realip_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/appx/nginx-geoip/source/openssl-1.0.2o --add-module=/appx/nginx-geoip/source/ngx_http_geoip2_module-3.2
make
make install
geoip2 IP地址库下载:
下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/
注意GeoLite2 City 和GeoLite2 Country 2个文件都要下载。
下载选择:MaxMind DB binary, gzipped
样例配置(nginx):
#IP地址库解析映射
geoip2 /app/nginx-geoip/geoip_db/GeoLite2-Country_20190521/GeoLite2-Country.mmdb {
auto_reload 5m;
$geoip2_metadata_country_build metadata build_epoch; #变量名可以自定义
$geoip2_country_code default=US country iso_code;
$geoip2_country_name country names zh-CN;
}
geoip2 /app/nginx-geoip/geoip_db/GeoLite2-City_20190521/GeoLite2-City.mmdb {
$geoip2_city_name default=ShangHai city names zh-CN;
$geoip2_continent_code continent code;
}
location /myip {
default_type text/plain;
return 200 "$remote_addr $geoip2_city_name $geoip2_country_code $geoip2_continent_code";
}
2.3 进阶介绍
变量$geoip2_continent_code 可以自己指定任意名称,
注意 $geoip2_country_name country names zh-CN;
代表寻找country_name 这个字段,且是在中文名称的IP库中寻找。
如果某个字段并非多语言支持的,则不能写zh-CN。
所有字段名称可以在CSV格式的文件中找到,如果你要取city_code 当前IP这个字段的值,则可以按照、如下设置获取:
$geoip2_city_code city code;
COUNTRY和CITY库里面的字段不是全部一样,感兴趣的可以下载CSV格式GEOIP库进行研究。