首页 > Web开发 > 详细

nginx判定国家ip访问网站

时间:2020-05-05 11:06:11      阅读:208      评论:0      收藏:0      [点我收藏+]


我们可以通过GeoIP模块和MaxMind免费数据库来实现
MaxMind具有新版本的数据库GeoLite2,它仅支持CSV和mmdb格式。
可以支持mngx_http_geoip2_modulemdb格式,但是当我检查Nginx by时nginx -V,我发现它是使用编译的with-http-geoip_module=dynamic
因为我的nginx版本是低版本

检查geoip模块是否安装

nginx -V

技术分享图片

下载GeoIP MaxMind GeoCity和GeoCountry数据库

我们可以从MaxMind下载最新的数据库。
https://www.maxmind.com/en/accounts/258407/geoip/downloads
但是,如开头所述,最新的数据库仅具有CSV和mmdb格式。

mkdir /etc/nginx/geoip -p
cd /etc/nginx/geoip
下载 GeoLite2-Country-CSV_20200324.zip

我发现geolite2legacy可以GeoLite2数据库转换为旧格式。
geolite2legacy使用python做到这一点。在我的环境中,我需要安装ipaddr和pygeoip来执行它。

apt install python-pip
pip install pygeoip
pip install ipaddr

克隆geolite2legacy,并且将csv格式的GeoLite2数据库转换为旧格式

git clone https://github.com/sherpya/geolite2legacy.git
cd geolite2legacy
./geolite2legacy.py -i ../GeoLite2-Country-CSV_20200324.zip -f geoname2fips.csv -o GeoIP.dat

将GeoIP.dat迁移到自定义目录

mv GeoIP.dat /etc/nginx/geoip/

配置nginx

打开/etc/nginx/nginx.conf并将其放置http{}在任何_包含_行之前的块中。

        geoip_country /etc/nginx/geoip/GeoIP.dat;
        map $geoip_country_code $redirect_country {
        default no;
        CN yes;     
   }


CN为国家编码,可以在https://dev.maxmind.com/geoip/legacy/codes/iso3166/中查看各国家的国家编码


我们这里设置CN为yes, 现在,我们得到了$redirect_country变量,但实际上并没有重定向。

在?server{}?设置rewrite跳转

if ($redirect_country = yes) {
    rewrite ^ https://www.lightda.no$request_uri break;
}


这里是定义$redirect_country = yes 则跳转到其他页面,相反如果不是yes则继续访问该网站.

nginx判定国家ip访问网站

原文:https://www.cnblogs.com/zeq912/p/12829818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!