Nginx GeoIP 用户访问城市地区位置信息

guiyun affiliate

Nginx GeoIP判断城市地区

1.所需两个组件库模块:
1.1.Nginx需要添加ngx_http_geoip_module模块
1.2.安装GeoIP library

2.模块与参数介绍
2.1.ngx_http_geoip_module
ngx_http_geoip_module模块创建变量,使用预编译的MaxMind数据库解析客户端IP地址,得到变量值,
然后根据变量的值去匹配判断,所以要模块依赖MaxMind GeoIP库,GeoIP数据库支持两种格式CSV格式和二进制格式。

2.2.geoip_country
语法:geoip_country path/to/db.dat;
默认值:none
使用字段:http
这个指令为IP地址对应国家的.dat数据库文件指定完整的路径,这样就可以通过客户端的IP来获取地理信息,设置这个值以后可以使用下列变量:

$geoip_country_code; - 两个字母的国家代码,如:”RU”, “US”。 
$geoip_country_code3; - 三个字母的国家代码,如:”RUS”, “USA”。 
$geoip_country_name; - 国家的完整名称,如:”Russian Federation”, “United States”。

Nginx将这个数据库缓存到内存中,IP对应国家的数据库很小,大约只有1.4M,所以并不会占用多大内存,但是城市的数据库很大,因此会带来更大的内存占用。

2.3.geoip_city
语法:geoip_city path/to/db.dat;
默认值:none
使用字段:http
这个指令为IP地址对应国家,城市以及地区的.dat数据库文件指定完整的路径,这样就可以通过客户端的IP来获取地理信息,设置这个值以后可以使用下列变量:

$geoip_country_code -  两个字母的国家代码,如:”RU”, “US”。 
$geoip_country_code3 - 三个字母的国家代码,如:”RUS”, “USA”。 
$geoip_country_name - 国家的完整名称,如:”Russian Federation”, “United States”(如果可用)。 
$geoip_region - 地区的名称(类似于省,地区,州,行政区,联邦土地等),如:”30”。 30代码就是广州的意思  
$geoip_city - 城市名称,如”Guangzhou”, “ShangHai”(如果可用)。
$geoip_postal_code - 邮政编码。
$geoip_city_continent_code。 
$geoip_latitude - 所在维度。 
$geoip_longitude - 所在经度。

3.安装 GeoIP library (在Nginx添加模块前安装)
安装方法: http://www.linuxhub.org/?p=3843
如果不安装,Nginx编译时会报以下错误:
./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.4.Nginx添加ngx_http_geoip_modules模块模块添加方法: http://www.linuxhub.org/?p=3220

4.Nginx添加ngx_http_geoip_modules模块
模块添加方法: http://www.linuxhub.org/?p=3220




nginx version: nginx/1.6.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
TLS SNI support enabled
configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6 –with-http_geoip_module

5.Nginx配置测试

http {
    ...
    geoip_country /usr/local/nginx/conf/GeoIP.dat;
    geoip_city /usr/local/nginx/conf/GeoLiteCity.dat;
    ...
    }


6.添加个测试日志格式,增加($geoip_country_name $geoip_region $geoip_city)


log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’
‘$geoip_country_name $geoip_region $geoip_city';

3.4.不同城市地区的访问日志


image.png


原文地址:https://www.linuxhub.org/?p=3854

guiyun affiliate

作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:取出Nginx一分钟内的日志
下一篇:linux 命令之 tar 使用

相关推荐

4

发表评论