博客开启GeoIP2服务
给博客开启geoip2服务,用于屏蔽一些国家或地区访问,查看本机IP详细信息等等。主要是,安装libmaxminddb模块,Nginx编译geoip2模块,配置Nginx,下面是详细过程。
安装libmaxminddb模块
首先是libmaxminddb的GitHub:https://github.com/maxmind/libmaxminddb
这里不要直接git clone
,因为俺发现master有bug,可以到Latest release里下载编译。
1 | wget -c https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz -O - | tar -xz |
如果以上的步骤没有出错,libmaxminddb就安装好了,可以输入mmdblookup看看是否安装成功。
mmdblookup --version
下载ngx_http_geoip2_module
下载ngx_http_geoip2_module,是为了把插件编译进Nginx中以支持geoip2
GitHub地址:https://github.com/leev/ngx_http_geoip2_module
直接git下载:
git clone --recursive https://github.com/leev/ngx_http_geoip2_module.git
编译Nginx
首先,还是Nginx的官方下载页:
https://nginx.org/en/download.html
主要步骤是打入刚刚下载的ngx_http_geoip2_module模块,下面是编译过程:
1 | #下载并解压最新nginx源码 |
编译完成后,切换到objs目录,可以看到我们想要的两个库文件:
1 | ngx_http_geoip2_module.so |
把这两个文件移动到/usr/lib/nginx/modules路径下:
1 | cd /nginx-1.19.0/objs |
配置Nginx
配置Nginx前,要先从maxmind的官网上下载GeoLite2 City的数据库,因为geoip2要收费,所以只能下载geolite2,并且需要注册下载。
maxmind的官网:https://dev.maxmind.com/geoip/geoip2/geolite2/
注:maxmind官方目前没有找到免费的ISP库,所以以下操作只基于City和Country库来进行。
主要是下载GeoLite2-City.mmdb
和GeoLite2-Country.mmdb
文件,由于需要注册下载,下面下载链接作为演示用。
1 | #新建geoip文件夹,放置mmdb文件 |
使用mmdblookup命令在库中搜索试试:
mmdblookup -f /etc/geoip/GeoLite2-City.mmdb -i 141.164.50.53
接下来就是配置nginx.conf文件了。
查看IP地址服务
在nginx.conf中第一行加入下面内容,用来引用ngx_http_geoip2_module模块:
load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so;
接下来在http代码段中加入以下内容,通过ngx_http_geoip2_module访问ip获得相应的geo信息。
1 | geoip2 /etc/geoip/GeoLite2-City.mmdb { |
然后在nginx里的server代码段加入下面内容:
1 | location = /ip { |
重启nginx后,就可以在域名后面加上/ip
来查看自己的IP及地域信息了。
演示地址:https://hostalk.net/ip
Linux下IP查询:curl https://hostalk.net/ip
当然,你还可以美化一下这个前端:
限制国家访问
如果需要禁止某些国家访问,比如说中国,只需要在http代码段添加下面内容:
1 | geoip2 /etc/geoip/GeoLite2-Country.mmdb { |
然后在server代码段添加下面内容即可:
1 | location / { |
其它用法待开发中,最后,提醒一下,如果使用本页中的代码,请删除掉注释,避免出错!
参考: