1.0 geoip2核心识别库

安装geoip2 lib步骤:

cd /usr/local/src
rm -f libmaxminddb-1.4..tar.gz
wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz
tar -xzf libmaxminddb-1.4..tar.gz
cd libmaxminddb-1.4.
yum install gcc gcc-c++ make -y
./configure
make
make check
sudo make install echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
sudo ldconfig

2.0 下载ngx_http_geoip2_module 模块

cd /usr/local/src
wget https://github.com/leev/ngx_http_geoip2_module/archive/3.3.tar.gz
tar -xzf 3.3.tar.gz
mv ngx_http_geoip2_module-3.3 ngx_http_geoip2_module 

nginx集成步骤:

cd /usr/local/src
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -zxf nginx-1.16..tar.gz
cd nginx-1.16.1
useradd -M -s /sbin/nologin www yum install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel -y
./configure --user=www --group=www --prefix=/usr/local/nginx \
--with-ld-opt="-Wl,-rpath -Wl,/usr/local/lib" \
--with-http_sub_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=/usr/local/src/ngx_http_geoip2_module make
make install

geoip2 IP地址库下载:

2020年最新GeoLite2-City.mmdb 无法直接下载,必须注册maxmind账号

. 需要在maxmind 后台注册账号,并且生成Account/User ID 和 License key
. 安装geoipupdate, 下载地址https://github.com/maxmind/geoipupdate/releases
. 配置geoipupdate的GeoIP.conf , 填写maxmind账号的User ID 和 License key 和 EditionIDs 博主使用的是centos
安装如下
cd /usr/local/src/
wget https://github.com/maxmind/geoipupdate/releases/download/v4.2.0/geoipupdate_4.2.0_linux_amd64.rpm
rpm -ivh geoipupdate_4..0_linux_amd64.rpm
rpm -ql geoipupdate
vi /etc/GeoIP.conf
#填写AccountID XXXX
#填写LicenseKey XXXX
#EditionIDs可以不修改,系统默认有填 GeoLite2-Country GeoLite2-City
#笔者EditionIDs只保留GeoLite2-City
#保存退出 运行geoipupdate
/usr/bin/geoipupdate
cd /usr/share/GeoIP/
会看到GeoLite2-City.mmdb
把GeoLite2-City.mmdb文件cp到需要使用的目录
sudo mkdir -p /usr/local/nginx/geoip/
\cp -rf /usr/share/GeoIP/GeoLite2-City.mmdb /usr/local/nginx/geoip/maxmind-city.mmdb

注意GeoLite2 City 和GeoLite2 Country 两个IP库,请下载City的mmdb数据文件,较于其他两者信息更丰富

nginx 配置geoip2 样例,geoip2的配置字段在http

http {
...
geoip2 /usr/local/nginx/geoip/maxmind-city.mmdb {
$geoip2_data_country_code default=US source=$remote_addr country iso_code;
$geoip2_data_country_name country names en;
$geoip2_data_city_name default=London city names en;
$geoip2_data_province_name subdivisions names en;
$geoip2_data_province_isocode subdivisions iso_code;
}
.... fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param CITY_NAME $geoip2_data_city_name;
....
} stream {
...
geoip2 /usr/local/nginx/geoip/maxmind-city.mmdb {
$geoip2_data_country_code default=US source=$remote_addr country iso_code;
$geoip2_data_country_name country names en;
$geoip2_data_city_name default=London city names en;
$geoip2_data_province_name subdivisions names en;
$geoip2_data_province_isocode subdivisions iso_code;
}
...
}

nginx配置中的变量名如,geoip2_data_country_code,geoip2_data_country_name 等等,都是自定义的名称,可以加在日志字段中

3.0 在nginx 中配置黑名单国家的变量 $blacklist_country

在http{} 字段,任何include之前,添加如下配置

[...]
map geoip2_data_country_code $allowed_country {
default yes;
US no;
JP no;
SG no;
}
[...]

以上配置将允许所有的国家,除了美国,日本,和新加坡 (您可以查看所有国家代码的列表,点这里

相反的,如果你想阻止所有国家,除了少数几个国家可以访问,请参考如下的配置

[...]
map geoip2_data_country_code $allowed_country {
default no;
CN yes;
HK yes;
US yes;
}
[...]

现在,你做了如上配置,并不会阻止任何的国家,那只是设置了一个变量$allowed_country
想要实际阻止国家/地区,必须修改vhost的配置
把下面的代码放到server{}字段, 这个代码也可以放到location{}字段

[...]
if ($allowed_country = no) {
return 403;
}
[...]

任何从黑名单国家的用户访问,都会收到403错误代码,

修改完配置,不要忘记reload nginx

/usr/local/nginx/sbin/nginx -s reload

4.0 通过如下命令可以直接本地查询IP信息

/usr/local/bin/mmdblookup --file /usr/local/nginx/geoip/maxmind-city.mmdb --ip 8.8.8.8

会出来许多信息,用json格式展示

  {
"country":
{
"geoname_id":
<uint32>
"iso_code":
"US" <utf8_string>
"names":
{
"de":
"USA" <utf8_string>
"en":
"United States" <utf8_string>
}
}
}

如果IP 后面可以跟不同的查询,如下面查询了国家的英文名

/usr/local/bin/mmdblookup --file /usr/local/nginx/geoip/maxmind-city.mmdb --ip 8.8.8.8 country names en
"United States" <utf8_string>

2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问的更多相关文章

  1. nginx的ngx_http_geoip2模块以精准禁止特定地区IP访问

    要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况. 解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要mon ...

  2. 企业运维实践-Nginx使用geoip2模块并利用MaxMind的GeoIP2数据库实现处理不同国家或城市的访问最佳实践指南

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 前言 ...

  3. nginx禁止特定UA访问

    一.UA是什么? User Agent 简称UA,就是用户代理.通常我们用浏览器访问网站,在网站的日志中,我们的浏览器就是一种UA. 二.禁止特定UA访问 最近有个网站(www.C.com)抄袭公司主 ...

  4. Nginx安装echo模块

    echo-nginx-module 模块可以在Nginx中用来输出一些信息,可以用来实现简单接口或者排错. 项目地址:https://github.com/openresty/echo-nginx-m ...

  5. 开始Nginx的SSL模块

    nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/n ...

  6. nginx內建模块使用

    目录 nginx內建模块使用 1. 內建模块的引入 1.1 查看安装信息 1.2 重新指定配置信息 2. 內建模块的使用 2.1 http_stub_status_module 2.2 http_ra ...

  7. nginx 安装第三方模块(lua)并热升级

    需求: nginx上将特定请求拒绝,并返回特定值. 解决办法: 使用lua脚本,实现效果. 操作步骤: 安装Luajit环境 重新编译nginx(目标机器上nginx -V 配置一致,并新增两个模块n ...

  8. 2020年最新ZooKeeper面试题(附答案)

    2020年最新ZooKeeper面试题 1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zooke ...

  9. Nginx 编译 echo 模块

    Nginx  编译 echo 模块 echo模块下载地址:https://github.com/openresty/echo-nginx-module 查看nginx已经编译的模块, nginx -V ...

随机推荐

  1. sublime text3 安装详解+前端插件

    1,下载sublime 3,地址:http://www.sublimetext.com/ 2,注册码:(在网上找的,感谢前辈)打开sublime3, help----add license---复制下 ...

  2. Leetcode字典树-720:词典中最长的单词

    第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点.大佬看见请直接路过. https://leetcode-cn.com/problems/longest ...

  3. Oracle列转行 参数动态传入iBatis使用示例

    Oracle行转列 参数动态传入iBatis使用示例 最近做了一个需求,需要获取工作流数据的各个节点的渠道数量信息,各渠道的费用信息~ 之前的需求是只需要获取渠道数据,所以做了渠道兼容,每个渠道数量的 ...

  4. Codeforces Round #340 (Div. 2) E XOR and Favorite Number 莫队板子

    #include<bits/stdc++.h> using namespace std; <<; struct node{ int l,r; int id; }q[N]; in ...

  5. PHP0020:PHP 单文件上传 多文件上传

  6. python——面向对象(1),基础

    """面向对象:抽象化编程思想.类,对象:用类来创建(实例化)对象.类:一系列特征和行为相同的事物总和, 1.属性:特征 2.行为:方法 定义类 :PEP 8要求标识符的 ...

  7. node post 大数据无响应超时

    使用 express 框架,post 较大数据量(富文本,里面包含了图片base64数据,大约300k)时,node 无响应,把数据内容减少后能顺利提交. 是因为数据量大过body post 的限制导 ...

  8. CentOS7安装postgreSQL11

    1.添加PostgreSQL Yum存储库 sudo yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel- ...

  9. libgdiplus安装配置

    1.下载安装包:wget http://download.mono-project.com/sources/libgdiplus/libgdiplus0-6.0.4.tar.gz2.解压缩.编译安装 ...

  10. Count the Colors ZOJ - 1610 区间颜色覆盖

    #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> ...