前文中,介绍了如何在nginx中实现IP的定位,但是下载的数据我们可以看到是截止到某一日期的数据库,例如GeoLite2-City_20211214.tar.gz,就指明是2021年12月14日的数据库,maxmind官网提供了两种自动更新方法(如第三方工具更新的方法风险自负),一种是直接下载数据库,这种就不说了,因为不是官网推荐的用法,另外一种通过GeoIP Update program(照例,链接放在下方参考中)。
按照官网教程,一步步来,首先找到geoipupdate的发布(releases)版本页面,找到适合的版本,我的是linux服务器版本
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 /opt/geoipupdate_4.8.0_linux_386/geoipupdate /usr/local/bin/
这个时候我皮了一下,因为geoipupdate 默认会前往/usr/local/etc去寻找一个名为GeoIP.conf的文件:
geoipupdate -v
现在还不存在,所以报错了。
第二步,创建带有账户信息的GeoIP.conf文件。
按照这个指示创建文件,唯一需要自己操作的就是
# Replace YOUR_LICENSE_KEY_HERE with an active license key associated
# with your MaxMind account.
LicenseKey YOUR_LICENSE_KEY_HERE
创建License Keys之后,填入到文件中,在这里插句题外话,这个LK只会在创建的时候完整展示一次,而且一旦删除之后这个秘钥无法再次激活(所以一定要注意更新集成),点击Generate new license key,因为我是第一次使用,所以点击否就行
完成秘钥文件的制作之后,我们再次查看版本,正常了,但是报错如下
按照上面的要求,创建一个就行
cd /usr/local/share
mkdir GeoIP
geoipupdate -v
再前往刚刚创建的GeoIP目录可以发现多了三个mmdb的文件
如果你想自定义目录也是可以的,使用如下命令(未测试)
go build -ldflags "-X main.defaultConfigFile=/etc/GeoIP.conf \
-X main.defaultDatabaseDirectory=/usr/share/GeoIP"
接下来我们就可以试下新安装的数据库了,nginx更改配置如下
geoip2 /usr/local/share/GeoIP/GeoLite2-Country.mmdb {
auto_reload 5m;
$geoip2_metadata_country_build metadata build_epoch;
$geoip2_data_country_code default=US country iso_code;
$geoip2_data_country_name country names en;
}
其实就是改一个mmdb 的路径而已,测试下日志还是正常输出。
第三步,crontab保持更新,示例,如果运行了防火墙,还必须开放443端口
crontab -e
# top of crontab
5 9 * * 1,3 /usr/local/bin/geoipupdate
# end of crontab
参考:
# license
https://www.cnblogs.com/baxiqiuxing/p/12376879.html
# 官方更新文档
https://dev.maxmind.com/geoip/updating-databases?lang=en
# GeoIP Update program.
https://github.com/maxmind/geoipupdate/releases