• Nginx使用GeoIP模块来限制地区访问


    举例比如限制泰国地区的IP访问:

    前提条件,安装了http geoip 或stream geoip模块的Nginx Plus或者开源nginx

    Maxmind的GeoLite Legacy数据库

    1.安装NginxPlus

    yum -y install nginx-plus-module-geoip

    在配置文件中开启GeoIP动态模块

    load_module modules/ngx_http_geoip_module.so;

    load_module modules/ngx_stream_geoip_module.so;

    1.1 对于开源的Nginx

    nginx -V 确保已经安装了geoip模块

    2.然后从MaxMind下载ip库文件

    wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

    https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz

    wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

    https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz

    (GeoLite2-Country.mmdb)

    配置地理位置数据库的路径

    http语句中引用数据库文件

    http {

    ...

    geoip_country GeoIP/GeoIP.dat;

    geoip_city GeoIP/GeoLiteCity.dat;

    ... }

    通过geoip_country和geoip_city 指令的变量把数据传到map或split_client模块

    map $geoip_country_content_codes $nearest_server {

    default default {};

    EU  eu;

    NA  na;

    AS  as;

    AF  af;

    ...

    }

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

    ......

    server {

      listen  1235;

      proxy_pass $nearest_server;

    ...

       location / {
           root   /home/vpsee/www;
           if ($geoip_country_code = CN) {
             root /home/vpsee/cn;
              }
    if ($geoip_country_code = VN) {
             root /home/vpsee/vn;
              }

    ...

    }

    upstream eu {

    server eu1.example.com:12345;

    server eu2.example.com:12345;

    }

    http语句内嵌server语句实现将IP库文件,通过IP判断是否提供网页服务。

    $geoip_city_content_code  变量

    proxy_pass 去匹配相应的upstream服务器,进行响应即可。

  • 相关阅读:
    编写高质量代码 :Web前端开发修炼之道(读书笔记)
    Cordova开发学习笔记
    C++面试总结
    深信服社招Linux岗位一面记录
    一次软件开发不问技术的面试
    面试总结2
    剑指offer 学习笔记(一):二维数组中的查找
    关于思维习惯问题
    ajax的使用(使用json格式提交给服务端)
    es6-13 类与对象
  • 原文地址:https://www.cnblogs.com/Enzoo/p/10571335.html
Copyright © 2020-2023  润新知