我不会接受我不要的未来
哪怕是命中注定

nginx安装Geoip模块显示访问者区域信息及应用

安装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

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

将库地址配置到 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;
            }
        }
    }
}

应用

if ( $geoip_country_code = US ) {
        return 502 "china";
        }
判断来访IP国家代码,实现拦截访问

使用指令的$geoip_city_continent_code变量geoip_citymap模块,您可以创建另一个变量

#...
map $geoip_city_continent_code $nearest_server {
    default default {};
    EU      eu;
    NA      na;
    AS      as;
    AF      af;
#...

然后可以根据传入$nearest_server变量的值选择upstream服务器:

#...
server {
    listen 12346;
    proxy_pass $nearest_server;
}
 upstream eu {
    server eu1.example.com:12345;
    server eu2.example.com:12345;
}
upstream na {
    server na1.example.com:12345;
    server na2.example.com:12345;
}
#...

 

相关参数

  • $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 – 所在经度。
赞(0)
未经允许不得转载:技术搬运工 » nginx安装Geoip模块显示访问者区域信息及应用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我们不生产技术 我们只是技术的搬运工