1.前言
今天查询后台访问日志的时候发现有很多国外ip访问,通过追溯这些IP发现网站整体被一个国外服务器网站所盗用,于是就给Nginx配置geoip禁止国外IP访问本站。
2.准备工作
安装编译前先将已经安装的Nginx文件进行备份,通过ps命令查看Nginx文件的路径。以下所有步骤都以自身Nginx路径为准。
我的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
3.开始操作
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步得到的路径自行变换)
这个内容需要进行保存,后面会用到 (删除./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
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
- 下载后通过ftp等工具上传到/usr/local/share/GeoIP/目录下并通过
tar zxvf Geo*
解压 - 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; }
在网站vhost配置文件中server 中的 location 下添加条件
如果满足IP 是国外IP 就 执行下面的return 动作
当访问IP 是国外IP ,直接返回404
if ($allowed_country = yes) {
return 404;
}
8.重启nginx
service nginx restart