隐藏

如何使用GeoIP来屏蔽Nginx国外访问

发布:2022/12/20 17:29:51作者:管理员 来源:本站 浏览次数:562

这个功能是基于with-http_geoip_module模块实现的,可以设置需要屏蔽的区域访问


测试环境:centos 7.6


工具: xshell


一、首先需要先下载nginx源码包,下载nginx、解压,配置与编译,安装


wget http://nginx.org/download/nginx-1.16.1.tar.gz


解压与配置安装


#下载编译依赖

yum -y install gcc pcre-devel openssl-devel zlib-devel

#添加用户和用户组 设置程序启动的用户

groupadd www

useradd -M -g www -s /usr/sbin/nologin www

#解压源码包

tar -zxvf nginx-1.16.1.tar.gz

#编译安装过程

cd nginx-1.16.1

./configure --user=www --group=www  \

--prefix=/usr/local/nginx \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-http_geoip_module

#编译 && 安装

make && make install

/usr/local/nginx/sbin/nginx #启动

/usr/local/nginx/sbin/nginx -s stop #关闭


以上只是编译与安装nginx,如果没有nginx的,或者嫌麻烦的,也可以使用,我这边写的一键安装脚本,nginx是1.16.1,php是7.3的,mysql是5.6的,仅限centos7使用


教程与脚本:https://github.com/darren2025/LNMP-


二、怎么配置模块


1.首先,先下载IP库


wget http://www.321dz.com/shell/GeoIPv6.dat


2.我这里将这个文件复制道nginx配置文件下,如果你们地址不一样就换一下,如果不换也可以(随意这步)


cp -r GeoIPv6.dat /usr/local/nginx/conf




3.编辑nginx配置文件,我的配置文件在 /usr/local/nginx/conf/nginx.conf


vim /usr/local/nginx/conf/nginx.conf


将下面的内容添加进 http {} 区域,并且要放在任何include语句之前:


  geoip_country /usr/local/nginx/conf/GeoIPv6.dat;  #放刚才那个下载的文件地址


  map $geoip_country_code $allowed_country {


  default no;  #默认都拒绝


     CN yes;  #允许中国


     TW yes; #允许台湾,台湾也是中国的


     HK yes;  #中国香港


     MO yes;  #中国澳门


  }




以上是定义规则,现在要使用规则,接下来在server {} ,一个server代表一个虚拟主机区域里添加以下内容:


#判断是不是在拦截范围,是直接403,不让访问了

        if ($allowed_country = no) {

               return 403;

        }


 


效果图:一个是用美国服务器访问的,一个是用我本地浏览器访问的



当然也可以对某些目录限制


location /admin {


  if ($allowd_country = no) {


 return 403;


  }

}


 


这个是不允许特定区域访问这个admin目录,这个就要看怎么应用了.


4.最后完成后,记得重载nginx配置


/usr/local/nginx/sbin/nginx -s reload  #重载配置文件  使配置生效(当更改了配置文件的时候需要使用)