Nginx实现对客户端IP的地域查询

12 篇文章 0 订阅

wget https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz
tar -zxvf libmaxminddb-1.3.2.tar.gz
cd libmaxminddb-1.3.2
./configure && make && make install
echo /usr/local/lib  >> /etc/ld.so.conf.d/local.conf 
ldconfig

killall nginx / /application/nginx/sbin/nginx -s quit

mv /application/nginx/sbin/nginx /application/nginx/sbin/nginx_old

cd /application/software/

git clone https://github.com/leev/ngx_http_geoip2_module.git

cd /application/software/nginx-1.14.2/

# nginx -V

./configure --user=www --group=www --prefix=/application/nginx1.14.2 --with-openssl=/application/software/openssl-1.0.2o --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-ld-opt=-ljemalloc --add-module=/application/software/ngx_http_geoip2_module

# don't execute "make install"
make

cp objs/nginx /application/nginx/sbin/nginx

mkdir /application/nginx/modules

# if nginx compiled by dynamic
cp objs/ngx_http_geoip2_module.so /application/nginx/modules/

# https://www.maxmind.com/en/home  christ1208@gmail.com / Airmacau@2019
# https://dev.maxmind.com/geoip/geoipupdate/
# https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=&suffix=tar.gz
download and upload GeoLite2-City.mmdb to /application/nginx/modules/


# nginx.conf
cp /application/nginx/conf/nginx.conf /application/nginx/conf/nginx.conf_20201204 
cp /application/nginx/conf/vhost/web_api_app_admin_wx.conf /application/nginx/conf/vhost/bak/web_api_app_admin_wx.conf_20201204


vim /application/nginx/conf/nginx.conf

# resolve multiple IP addresses in X-Forwarded-For
map $http_x_forwarded_for $realip {
    ~^(\d+\.\d+\.\d+\.\d+) $1;
    default $remote_addr;
}

geoip2 /application/nginx/modules/GeoLite2-City.mmdb {
    auto_reload 5m;
    $geoip2_metadata_country_build metadata build_epoch;
    $geoip2_continent_code source=$realip  continent code;
    $geoip2_continent_name source=$realip  continent names en;
    $geoip2_data_country_name source=$realip  country names en;
    $geoip2_data_country_code source=$realip  country iso_code;
    $geoip2_data_city_name source=$realip  city names en;
    $geoip2_data_time_zone source=$realip location time_zone;
}

map $geoip2_continent_code $allowed_status {
    default no;
    
    # Asia
    AS yes;
    # Africa
    AF no;
    # Antarctica
    AN no;
    # Europe
    EU no;
    # North america
    NA  no;
    # Oceania
    OC no;
    # South america
    SA no;
}

log_format mmdb_visit escape=json
        '{'
                '"allowed_status":"$allowed_status",'
                '"client_ip": "$realip",'
                '"time_local":"$time_local",'
                '"request_method":"$request_method",'
                '"request":"$request",'
                '"response_status": "$status",'
                '"body_bytes_sent":"$body_bytes_sent",'
                '"request_time":"$request_time",'
                '"http_referrer":"$http_referer",'
                '"http_user_agent":"$http_user_agent",'
                '"geoip_city": "$geoip2_data_city_name",'
                '"geoip_country_code": "$geoip2_data_country_code",'
                '"geoip_country_name": "$geoip2_data_country_name",'
                '"geoip_continent_code": "$geoip2_continent_code",'
                '"geoip_continent_name": "$geoip2_continent_name",'
                '"geoip_timezone": "$geoip2_data_time_zone"'
        '}';
    

vim /application/nginx/conf/vhost/web_api_app_admin_wx.conf

access_log /application/logs/nginx/web_app_api_wx_admin_mmdb_visit.log mmdb_visit;

if ($allowed_status = no) {
    return 500;
}
  
location /ip {
      default_type text/plain;
      return 200 "RemoteIP: $realip \n 
      City name: $geoip2_data_city_name \n 
      Country code: $geoip2_data_country_code \n 
      Country name: $geoip2_data_country_name \n 
      Continent code: $geoip2_continent_code \n 
      Continent name: $geoip2_continent_name \n";
}

/application/nginx/sbin/nginx   -s   reload

tail -f /application/logs/nginx/web_app_api_wx_admin_mmdb_visit.log 

# testing
mmdblookup --file /application/nginx/modules/GeoLite2-City.mmdb --ip 202.175.105.131

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值