zoukankan      html  css  js  c++  java
  • nginx判定国家ip访问网站


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

    检查geoip模块是否安装

    nginx -V
    

    image.png

    下载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则继续访问该网站.

  • 相关阅读:
    iOS多线程_06_GCD其它用法
    iOS多线程_05_线程间通信NSThread/GCD
    iOS多线程_04_GCD
    iOS多线程_03_Block
    iOS多线程_02_多线程的安全问题
    iOS多线程_01_简介和NSThread
    shell 根据端口号输出所有的pid
    【java核心36讲】接口和抽象类的区别
    CSS布局
    CSS基础
  • 原文地址:https://www.cnblogs.com/zeq912/p/12829818.html
Copyright © 2011-2022 走看看