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,如下图所示:

1657074888163.png

20220706103541.png

接下来安装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日志:
nginx日志

|| 版权声明
作者:废权
链接:https://blog.yjscloud.com/archives/266
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
nginx日志显示IP地理位置之ngx_http_geoip2_module模块安装
模块简介 ngx_http_geoip2_module模块使用预编译的MaxMind数据库创建变量,其值取决于客户端 IP 地址 ,通过此模块我们可以精准的限制或者允许某个国家的IP地……
<<上一篇
下一篇>>
文章目录
关闭
目 录