nginx GeoIP2模块 ,指定地区跳转,返回不同页面等。

https://blog.csdn.net/zgs_shmily/article/details/90551651 GeoLite 官网库地址http://geolite.maxmind.com/download/geoip

geoip2核心识别库

https://github.com/maxmind/libmaxminddb/releases

  1. wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz && tar -xvf libmaxminddb-1.4.2.tar.gz
  2. cd libmaxminddb-1.4.2
  3. ./configure
  4. make
  5. make check
  6. sudo make install
  7. sudo ldconfig
  8. sudo sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf"
  9. ldconfig

编译–with-http_geoip_module模块

#先看nginx有没有编译geoip模块,如果有就直接修改就行,没有就得先安装。
Nginx -V
#GeoIP2模块
git clone https://github.com/TravelEngineers/ngx_http_geoip2_module
#City库
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
#Country库
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz

yum install libxslt-devel yum install gd-devel yum -y install perl-devel perl-ExtUtils-Embed yum install gperftools

cd /data/installation/nginx1.17.6
./configure --prefix=/data/nginx --user=root --group=root --with-threads --with-http_realip_module --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_slice_module  --add-module=/data/installation/echo-nginx-module-0.61 --add-module=/data/installation/ngx_http_geoip2_module
make -j2
cp -f objs/nginx /data/nginx/sbin/
make upgrade
#走完之后,用nginx -V看看里面有没有geoip的模块,如果有就是成功了。
nginx -V

修改Nginx配置

http或server端中添加(一般都是http端中)

写法①

geoip_country /usr/share/GeoIP/GeoIP.dat;   #GeoIP所在目录
map $geoip_country_code $allowed_country {  #变量判断
default yes;   #允许
CN no;  #区域不允许,这个CN就是代表中国,如果是多个地区,就是CN下面加就行
}

写法②

geoip_country GeoIP/GeoIP.dat;

geoip_city GeoIP/GeoLiteCity.dat;

server端

location / {
root /data/wwwroot/test;  #网站目录
if ($allowed_country = no) {  #这里的no,就是上面html里面CN on,就是判断no区域

#if ($allowed_country = no) 也可以用if ($geoip_country_code = CN) 来代替,如果是多个区域就在CN后面几个|然后加区域代码
return 403;   #返回403提示
return http://域名; #跳转到其他人网站去 ,return也可以用rewrite,具体看自己网站的配置文件怎么设置的
root /data/wwwroot/test1;  #跳转到自己服务器的另外一个文件夹下面去
}
}

浏览器语言判断(自行选择)

if (navigator.language)
var language = navigator.language;
else
var language = navigator.browserLanguage;
if(language.indexOf('zh') > -1)document.location.href = 'cn'; #判断浏览器语言,后面的cn是网站下的耳机目录,这个随便自己修改,改成跳转网址都行

案例

http {
    # 只提取关键配置参数

    geoip2 /usr/local/GeoLite2-Country_20190507/GeoLite2-Country.mmdb {
        $geoip2_data_country_code default=CN country iso_code;
    }

    server {
        add_header "country" $geoip2_data_country_code; #添加个响应头,方便查。

        location / {
            if ($geoip2_data_country_code = CN) {
                root /mnt/cn;
            }

            if ($geoip2_data_country_code != CN) {
                root /mnt/other;
            }
        }
    }
}

案例2

set $deny 0;
    if ($geoip_country_code != "CN"){
        set $deny 1;
        return 302 $scheme://$host/405.html;
    }
    if ($deny = 1){
        return 302 $scheme://$host/405.html;
    }