1.geoip2核心知识库安装部署
下载知识库压缩包(国内服务器连接不了GitHub的话,就本地下载之后ftp传到服务器上面)
wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz
解压:tar -xvf libmaxminddb-1.4.2.tar.gz
进入知识库:cd libmaxminddb-1.4.2
编译./configure
安装:make && make install
依次执行下列命令:
ldconfig
sh -c “echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf”
ldconfig
完成之后的效果图:
2.编译安装nginx并安装http_geoip_module模块
2.1编译安装nginx
安装nginx所需依赖源:
安装gcc。gcc是Linux下的编译器,它可以编译C、C++、Ada、Object C和Java等语言。
yum -y install gcc
安装pcre。pcre是一个perl库,Nginx的HTTP模块使用pcre来解析正则表达式。
yum install -y pcre pcre-devel
安装zlib。zlib是一个文件压缩和解压缩的库,Nginx使用zlib对HTTP数据包进行gzip压缩和解压。
yum install -y zlib zlib-devel
到nginx官网下载nginx安装包:http://nginx.org/en/download.html
选择需要的版本,右键复制下载链接并在服务器下载:例如:wget http://nginx.org/download/nginx-1.21.6.tar.gz
解压:tar -zxvf nginx-1.21.6.tar.gz
解压之后进入安装包:cd nginx-1.21.6
编译:./configure
安装:make && make install
注意:nginx编译安装会默认安装到/usr/local/目录下,这一点与yum安装不同
进入安装nginx执行目录: cd /usr/local/nginx/sbin(若是觉得每次操作都要进入nginx安装目录很麻烦,可以自行设置环境变量)
命令演示:
启动:./nginx
停止:./nginx -s stop
检验配置:./nginx -t
更新配置:./nginx -s reload
2.2安装http_geoip_module模块
查看当前的nginx安装了哪些模块:./nginx -V
如果没有http_geoip_module的话下载http_geoip_module模块包:git clone https://github.com/TravelEngineers/ngx_http_geoip2_module
安装模块之前先执行下列命令安装相关依赖:
yum install libxslt-devel
yum install gd-devel
yum -y install perl-devel perl-ExtUtils-Embed
yum install gperftools
进入nginx安装包里面重新编译新增模块:
新增模块:./configure —prefix=/usr/local/nginx —user=root —group=root —add-module=/root/ngx_http_geoip2_module-master (这里的/root/ngx_http_geoip2_module-maste是刚刚下载的模块包位置,可以自定义)
安装:make && make install
安装完成之后进入nginx执行目录查看安装情况
cd /usr/local/nginx/sbin/
./nginx -V
3.添加geoip2数据库与数据库自动更新
3.1环境准备
可以先下载geoip2数据库到服务器上使用,后面再做自动更新的操作,也可以直接进行自动更新的操作,自动更新操作完成之后会自动下载最新的数据库文件,比较方便,这里我们直接进行自动更新的操作。
到geoip2官网注册账号,这个账号可以用于后续的数据库下载和数据库自动更新
https://www.maxmind.com/en/home
注册完成之后,点击右上角的头像进入管理许可证密钥:
点击生成新的密钥
按下图所示勾选参数:
注意:生成的密钥只会在生成时完整显示一次,后续就看不到了,可以把密钥配置文件下载到本地,方便后续使用。
下载到本地:
3.2自动更新和数据库文件下载
下载官方的自动更新程序geoipupdate:wget https://github.com/maxmind/geoipupdate/releases/download/v4.8.0/geoipupdate_4.8.0_linux_386.tar.gz
解压:tar -zxvf geoipupdate_*
进入安装包:cd geoipupdate_4.8.0_linux_386/
将其包里面的安装程序移动到/usr/local/bin目录下:
cp /root/geoipupdate_4.8.0_linux_386/geoipupdate /usr/local/bin/
接下来进入/usr/local/etc/目录下,创建GeoIP.conf文件
将之前下载的密钥配置文件内容复制进去:
在/usr/local/share位置下,创建GeoIP文件夹
cd /usr/local/share
mkdir GeoIP
执行更新程序:geoipupdate -v
然后在刚刚创建的/usr/local/share/GeoIP目录下就能看到更新程序自动下载的数据库文件了:
设置crontab保持更新
crontab -e
写入下列内容并保存
# top of crontab
5 9 1,3 /usr/local/bin/geoipupdate
# end of crontab
4.nginx引入geoip2功能
4.1修改nginx配置
写入http端内配置:
geoip2 /usr/local/share/GeoIP/GeoLite2-Country.mmdb{ #GeoIP数据库所在目录
$geoip2_country_code country iso_code; #定义国家编码变量,例如中国为CN,日本为JP,美国为US等
}
下面这里是设置IP来源拦截,这里的$allowed_country是自定义变量名,最好是全局唯一性,避免造成变量污染
map $geoip_country_code $allowed_country { #变量判断
default yes; #允许
CN no; #区域不允许,这个CN就是代表中国,如果是多个地区,就是CN下面加就行
}
server端配置:
add_header “country” $geoip2_country_code; #添加个响应头,方便测试
set $rootpath /home/html;
location / {
if ($allowed_country = no) {
set $rootpath /home/html/a;#如果是中国IP,就返回本地a文件夹内的页面
}
if ($allowed_country = yes) {
set $rootpath /home/html/b;#如果不是中国IP,就返回本地b文件夹内的页面
}
root $rootpath;
#root html;
#index index.html index.htm;
}
设置完成之后验证配置是否正确,然后重新载入配置:
浏览器访问该服务器IP测试结果:
中国IP访问:
其他国家IP访问: