前言

今天查询后台访问日志的时候发现有很多国外ip访问,通过追溯这些IP发现网站整体被一个国外服务器网站所盗用,于是就给Nginx配置geoip禁止国外IP访问本站。

准备工作

安装编译前先将已经安装的Nginx文件进行备份,通过ps命令查看Nginx文件的路径。以下所有步骤都以自身Nginx路径为准。
image-20201220140956731

可以看到Nginx路径为/usr/local/nginx/sbin/nginx ,所在目录就是/usr/local/nginx/sbin/

(宝塔的路径一般在/www/server/nginx/sbin/)

  • 2.进入目录

    cd /usr/local/nginx/sbin

  • 3.备份nginx,也就是将nginx复制为nginx.bak

    cp nginx nginx.bak

开始操作

1.安装geoip2扩展依赖

yum install libmaxminddb-devel -y

2.下载ngx_http_geoip2_module模块

这步要用到git命令,如果提示not found请先运行(yum install git -y)

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

3.移动clone的文件到指定目录

mv ngx_http_geoip2_module/ /usr/local/

4.查询Nginx版本号和所加载的模块

/usr/local/nginx/sbin/nginx -V

(宝塔为 /www/server/nginx/sbin/nginx -V,这里根据第1步得到的路径自行变换)

image-20210429213501893

这个内容需要进行保存,后面会用到 (删除./configure arguents:只留下以后的代码)

5.下载Nginx源码

宝塔如果使用的急速安装就卸载掉选择编译安装,源码会在/www/server/nginx/src保存,我没用宝塔,所以要下载Nginx源码。

首先进入用户根目录,然后进行下载源码(宝塔用户直接cd /www/server/nginx/src,当前步骤就不用执行了)

cd
wget http://nginx.org/download/nginx-1.18.0.tar.gz

解压ngxin,注意这里后缀为tar.gz,不能使用unzip解压

tar zxvf nginx-1.18.0.tar.gz

6.配置configure

进入ngxin源码目录

cd nginx-1.18.0
./configure空格+第7步保存的内容空格+ --add-module=/usr/local/ngx_http_geoip2_module

7. 编译nginx

make(如原本无nginx,make后还需make install)

这里需要漫长的等待

7.替换nginx

删除以前的nginx

rm -rf /usr/local/nginx/sbin/nginx
宝塔为 rm -rf /www/server/nginx/sbin/nginx

替换nginx

cp objs/nginx /usr/local/nginx/sbin/nginx
宝塔为 cp objs/nginx /www/server/nginx/sbin/nginx

重启nginx服务

service nginx restart

image-20201220142944519

7.修改nginx配置

模块安装成功后,还要在 Nginx 里指定数据库,在安装运行库时默认安装了两个,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6:

  • 创建GeoIP数据库目录并进入
mkdir /usr/local/share/GeoIP/
cd /usr/local/share/GeoIP/ 
  • 下载数据库

登录 http://www.maxmind.com 网址,创建账户 下载最新的库文件(账户创建就不演示了)

点击左侧 ,Download Files

image-20210429220523450

  • 下载后通过ftp等工具上传到/usr/local/share/GeoIP/目录下并通过tar zxvf Geo* 解压

微信截图_20210429220731

  • GeoLite2 City也要下载,操作一样

  • 解压后文件会出现在两个文件夹里面,将他们移动到GeoIP目录下

mv ./GeoLite2-Country_20210427/GeoLite2-Country.mmdb ./
mv ./GeoLite2-City_20210427/GeoLite2-City.mmdb ./
  • 进入Nginx配置文件目录(我的为/usr/local/nginx/conf)
cd /usr/local/nginx/conf
  • 备份nginx配置文件
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak
  • 修改nginx配置文件(通过vi/vim或者ftp下载到本地进行编辑都可以)

    在http中添加以下数据

    geoip2 /usr/local/share/GeoIP/GeoLite2-Country.mmdb {
    auto_reload 5m;
    $geoip2_data_country_code country iso_code;
    }
      map $geoip2_data_country_code $allowed_country {
                    default yes;
                    CN no;
    }

ww

在网站vhost配置文件中server 中的 location 下添加条件

如果满足IP 是国外IP 就 执行下面的return 动作

当访问IP 是国外IP ,直接返回404

        if ($allowed_country = yes) {
            return 404;
          }

微信截图_20210429221412

8.重启nginx

service nginx restart
最后修改:2021 年 04 月 29 日 10 : 32 PM
如果觉得我的文章对你有用,请随意赞赏