ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Nginx + GeoIP2 + libmaxminddb IP信息解析和地理定位,区域限制访问

2021-04-16 19:05:18  阅读:191  来源: 互联网

标签:geoip2 code http IP module libmaxminddb GeoIP2 nginx country


1.nginx安装ngx_http_geoip2_module 模块

  • 1.1
    首先下载nginx的第三方模块ngx_http_geoip2_module ,下载地址https://github.com/leev/ngx_http_geoip2_module/
  • 1.2
    然后对nginx增加ngx_http_geoip2_module模块
    #下载后解压至/home/user/
    #你的nginx安装目录下执行,如果你之前有手动安装过其他模块,也要在后面加上
    sudo ./configure --prefix=你的nginx安装路径 --add-module=/home/user/ngx_http_geoip2_module-master/
    sudo make
    #只执行make即可。正常情况下会在安装目录下的objs目录下生成新的nginx二进制文件,替换运行中nginx的即可,可把当前nginx备份一下。
    #替换后执行
    ./nginx -V
    # 即可看见添加的 ngx_http_geoip2_module 
    

2.安装GeoIP2离线数据库

  • 2.1
    geoip2下载离线数据库库需要注册用户才可下载。官方网址https://www.maxmind.com/en/home
    如图所示
    ![IMAGE](quiver-image-url/16417D5E0AC8B13B87429A191BAE7732.jpg =1576x894)
  • 2.2
    下载至本地后上传,解压。放到指定的目录下即可,自定义。后面配置的时候会用到这个文件所在路径

3.安装libmaxminddb

  • 3.1
    下载 https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz 并编译

    tar -xzf libmaxminddb-1.3.2.tar.gz
    cd libmaxminddb-1.3.2
    ./configure
    make
    make check 
    sudo make install
    sudo ldconfig
    
  • 3.2
    执行完毕,可手动测试是否可行

    
    mmdblookup --file /opt/fy/3rd/GeoIP/GeoLite2-City_20210406/GeoLite2-City.mmdb --ip  220.181.38.148 
    # --file 后面跟的是上面解压后的mmdb文件地址
    # --ip 则是你要查询的ip
    
    

    正常会返回一个json数据
    ![IMAGE](quiver-image-url/BA15C7961929C48685E019EBC3C790F1.jpg =664x947)

    ok,成功运行

4. nginx 配置GeoIP2

  • 4.1
    所有国家代码的列表 https://dev.maxmind.com/geoip/legacy/codes/iso3166/
    
    #http 下新增
    geoip2 /home/user/GeoLite2-Country_20210406/GeoLite2-Country.mmdb{
                #$geoip2_data_city_name source=$remote_addr country names en; 
                $geoip2_data_country_code source=$remote_addr country iso_code;
    }
    #注意,这里的source是重点,把访问的真实ip当做来源配置。    
    #或者用map
    #配置1
    map $geoip2_data_country_code $allowed_country {
        default yes;
        US no;
        JP no;
    }
    
    #配置1允许所有国家访问,除了美国和日本
    
    #配置2
    map $geoip2_data_country_code $allowed_country {
        default no;
        CN yes;
       
    }
    #配置2只允许中国访问
    
    server 下增加
    
    #简单用法
    location / {
      if ($geoip2_data_country_code != CN ) { return 403; } 
      #当通过mmdb数据库解析出$remote_addr中的ip对应的iso_code !=CN时返回403
    
    }
    #搭配map
    if ($allowed_country = no) {
            return 403;
    }
    
    
    配好后重启nginx即可放心食用

标签:geoip2,code,http,IP,module,libmaxminddb,GeoIP2,nginx,country
来源: https://www.cnblogs.com/s42-/p/14668356.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有