成功最有效的方法就是向有经验的人学习!

Nginx使用GeoIP模块识别用户地区

首先需要确认当前安装的 Nginx 是否安装了 GeoIP 模块

nginx -V

如果版本信息中包含 --with-http_geoip_module,则说明已经支持该模块,如果不支持请往下看
安装依赖

yum -y install zlib zlib-devel

安装 GeoIP

wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar -zxvf GeoIP.tar.gz
cd GeoIP-1.4.8
./configure
make
make install

使用ldconfig将库索引到系统中

echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
ldconfig

检查库是否加载成功

ldconfig -v | grep GeoIP

libGeoIPUpdate.so.0 -> libGeoIPUpdate.so.0.0.0
libGeoIP.so.1 -> libGeoIP.so.1.4.8
libGeoIPUpdate.so.0 -> libGeoIPUpdate.so.0.0.0
libGeoIP.so.1 -> libGeoIP.so.1.5.0

将 GeoIP 模块编译到 Nginx 中
根据你当前 Nginx 的安装参数带上 --with-http_geoip_module 重新编译

./configure --user=nginx --group=nginx \
    --with-http_geoip_module \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_stub_status_module \
    --with-mail \
    --with-mail_ssl_module \
    --with-file-aio
make && make install

使用 GeoIP
首先查看本地是否已有 GeoIP 数据库

cd /usr/local/share/GeoIP
ll
-rw-r--r--. 1 root root  1183408 Mar 31 06:00 GeoIP.dat
-rw-r--r--. 1 root root 20539238 Mar 27 05:05 GeoLiteCity.dat

如果没有这两个库,则手动下载

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gzip GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gzip GeoIP.dat.gz

将库地址配置到 nginx.conf 中这个位置

http{
    ...
    geoip_country /usr/local/share/GeoIP/GeoIP.dat;
    geoip_city /usr/local/share/GeoIP/GeoLiteCity.dat;
    server {
        location / {
            root /www;
            if( $geo_country_code = CN ){
                root /www/zh;
            }
        }
    }
}

其他参数

$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 - 所在经度。

实际应用中,我们可以统计不同地区的流量,或者分割不同地区的流量。
参考文献

How to install Nginx GeoIP module


http://nginx.org/en/docs/http/ngx_http_geoip_module.html

赞(0) 打赏
未经允许不得转载:陈桂林博客 » Nginx使用GeoIP模块识别用户地区
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册