nginx日志显示IP地理位置之ngx_http_geoip2_module模块安装
模块简介
ngx_http_geoip2_module
模块使用预编译的MaxMind数据库创建变量,其值取决于客户端 IP 地址 ,通过此模块我们可以精准的限制或者允许某个国家的IP地址访问WEB站点。MaxMind的GeoIP2和GeoLite2 IP智能产品和服务用于发现有关特定IP地址的信息。我们提供免费和付费网络服务、基于订阅的可下载数据库和免费可下载数据库。我们学习使用免费版本的就可以,当然付费版本的更新更及时,内容更详细(包括国家、城市、经纬度、运营商、甚至企业信息)。
nginx添加模块
下载合适nginx版本
mkdir /usr/local/nginx_modules
cd /usr/local/nginx_modules
wget http://nginx.org/download/nginx-1.17.3.tar.gz
tar zxvf nginx-1.17.3.tar.gz -C /usr/local/nginx_modules
下载ngx_http_geoip2_module模块
wget https://github.com/leev/ngx_http_geoip2_module/archive/refs/tags/3.4.tar.gz
tar zxvf 3.4.tar.gz -C /usr/local/nginx_modules
重新编译nginx(注意要根据实际环境编译)
# 要先安装依赖
yum -y install libmaxminddb libmaxminddb-devel gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
cd /usr/local/nginx_modules/nginx-1.17.3
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-openssl-opt='enable-weak-ssl-ciphers' --add-dynamic-module=/usr/local/nginx_modules/ngx_http_geoip2_module-3.4
# 编译好后执行make
make
将原有nginx版本的sbin目录下的nginx进行备份
cd /usr/local/nginx/sbin
mv nginx nginxold
将Nginx1.17.3安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd /usr/local/nginx_modules/nginx-1.17.3/objs
cp nginx /usr/local/nginx/sbin
进入到安装目录,执行make upgrade
cd /usr/local/nginx_modules/nginx-1.17.3
make upgrade
查看是否更新成功
/usr/local/nginx/sbin/nginx -V
也可以不替换nginx
和不执行make upgrade
,直接将编译生成的模块复制到modules
目录下,重新加载nginx
配置文件即可
mkdir /usr/local/nginx/modules
cp /usr/local/nginx_modules/nginx-1.17.3/objs/ngx_http_geoip2_module.so /usr/local/nginx/modules
安装geoip数据库
自 2019 年 12 月 30 日起,MaxMind 要求用户必须 注册帐户 并获取许可密钥以下载 GeoLite2 数据库。
注册后需要生成一个整数,并记录自己的 AccountID 和 LicenseKey,如下图所示:
接下来安装GeoIP
下载geoipupdate_4.9.0_linux_amd64.rpm
包
wget https://github.com/maxmind/geoipupdate/releases/download/v4.9.0/geoipupdate_4.9.0_linux_amd64.rpm
rpm -Uivh geoipupdate_4.9.0_linux_amd64.rpm --force --nodeps
编辑配置文件
# 自行替换xxxx内容
cat > /etc/GeoIP.conf << EOF
AccountID xxxxx
LicenseKey xxxx
EditionIDs GeoLite2-Country GeoLite2-City
EOF
可直接执行geoipupdate
更新数据库
创建定时任务自动更新
# 编辑定时任务
crontab -e
# 增加配置,需要自行修改更新时间以及日志路径
0 * * * 6 /usr/bin/geoipupdate > /var/log/geoipupdate.log 2>&1
编辑nginx.conf配置文件
在events模块上面添加一行配置
load_module modules/ngx_http_geoip2_module.so;
添加geoip2配置并修改log_format
配置,参考示例如下:
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_country_code default=unknow source=$remote_addr country iso_code;
$geoip2_country_name default=unknow source=$remote_addr country names zh-CN;
}
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
$geoip2_data_city_name default=unknow source=$remote_addr city names zh-CN;
$geoip2_data_city_subdivisions default=unknow source=$remote_addr subdivisions 0 names zh-CN;
}
log_format main escape=none
'sourceAddress=$remote_addr - $remote_user [$time_local] requestRInfo="$request" '
'responseCode=$status $body_bytes_sent httpRerfer="$http_referer" '
'"$http_user_agent" Xforwardefor=$http_x_forwarded_for request_time=$request_time upstream_response_time=$upstream_response_time'
'countryCode=$geoip2_country_code" countryName=$geoip2_country_name citySubdivisions=$geoip2_data_city_subdivisions cityName=$geoip2_data_city_name';
最后重启nginx即可
查看nginx日志:
作者:废权
链接:https://blog.yjscloud.com/archives/266
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
共有 0 条评论