Nginx加GeoIP屏蔽国外访问

admin2020-11-0327506

这个功能是基于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

Nginx加GeoIP屏蔽国外访问

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;  #中国澳门

   }

Nginx加GeoIP屏蔽国外访问

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

 #判断是不是在拦截范围,是直接403,不让访问了
         if ($allowed_country = no) {                return 403;
         }

 

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

Nginx加GeoIP屏蔽国外访问

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

location /admin {   if ($allowd_country = no) {  return 403;

   }
}

 

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

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

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


网友评论