ngx_http_geoip_module是对IP地址进行地域信息的读取。客户端在访问时,通过ip地址能够知道客户端所在的国家,城市。常用于处理不同国家的客户访问。

之前小菜有写过用yum源安装nginx传送门和nginx平滑升级传送门如果小伙伴们不记得可以回头找找。 在nginx平滑升级中介绍到用源码添加模块。

1.下载nginx-module-geoip

在第3小节中记录nginx安装中,默认是没有安装这个模块。需要手动下载ngx_http_geoip_module模块。

yum install nginx-module-geoip

安装成功后,会在/etc/nginx/module文件夹下出现geoip模块。

2.安装MaxMind的GeoIP库

将GeoIP库下载目录/opt/download文件夹下

cd /opt/download  #如果没有手动创建
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar -zxvf GeoIP.tar.gz
cd GeoIP-1.4.8
./configure
make
make install

刚才安装的库自动安装到 /usr/local/lib 下,所以这个目录需要加到动态链接配置里面以便运行相关程序的时候能自动绑定到这个 GeoIP 库:

echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
ldconfig

3.下载IP数据库

最终目录结构

/etc/nginx/data/geoip
|-GeoIP.dat
|-GeoLiteCity.dat

MaxMind 提供了免费的 IP 地域数据库,这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取。小菜在这里放一个官方的下载地址官方下载 需要下载GeoIP.dat.gz文件和GeoLiteCity.dat.gz文件。小菜在这里放一个云盘,方便国内小伙伴获取云盘地址 提取码[ 5ft5 ]

cd /etc/nginx/data/geoip  #如果没有data,需要手动创建

gunzip GeoIP.dat.gz  #解压
gunzip GeoLiteCity.dat.gz  #解压

4.编译安装

基本工作准备完成后我们就可以ngx_http_geoip_module编译进nginx。ngx_http_geoip_module文档 默认情况下不构建此模块,应使用--with-http_geoip_module配置参数启用它。

之前在nginx平滑升级中小菜编译nginx的源码包放在/opt/download/nginx-1.14.2文件夹下。

cd /opt/download/nginx-1.14.2

获取编译参数

nginx -V

输出

–prefix=/etc/nginx –sbin-path=/usr/sbin/nginx –modules-path=/usr/lib64/nginx/modules –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –http-client-body-temp-path=/var/cache/nginx/client_temp –http-proxy-temp-path=/var/cache/nginx/proxy_temp –http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp –http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp –http-scgi-temp-path=/var/cache/nginx/scgi_temp –user=nginx –group=nginx –with-compat –with-file-aio –with-threads –with-http_addition_module –with-http_auth_request_module –with-http_dav_module –with-http_flv_module –with-http_gunzip_module –with-http_gzip_static_module –with-http_mp4_module –with-http_random_index_module –with-http_realip_module –with-http_secure_link_module –with-http_slice_module –with-http_ssl_module –with-http_stub_status_module –with-http_sub_module –with-http_v2_module –with-mail –with-mail_ssl_module –with-stream –with-stream_realip_module –with-stream_ssl_module –with-stream_ssl_preread_module –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC’ –with-ld-opt=’-Wl,-z,relro -Wl,-z,now -pie’

添加编译参数--with-http_geoip_module

--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-http_geoip_module

编译

./configure  上面编译参数 

安装

make && make install

如果在编译中有错误,查看最上面的编译时出错排错。希望对小伙伴们有用

检测

nginx -V

查看输出编译参数有没有--with-http_geoip_module,有就证明安装好了。

5.配置模块

geoip_country

Syntax:	geoip_country file;
Default: 
Context: http


参数名描述
$geoip_country_code两个字母的国家/地区代码,例如“RU”,“US”
$geoip_country_code3三个字母的国家/地区代码,例如“RUS”,“USA”
$geoip_country_name国名,例如“俄罗斯联邦”,“美国”

geoip_city

Syntax:	geoip_city file;
Default: 
Context: http


参数名描述
$geoip_area_code电话区号(仅限美国)
$geoip_city_continent_code两个字母的大陆代码,例如“EU”,“NA”
$geoip_city_country_code两个字母的国家/地区代码,例如“RU”,“US”
$geoip_city_country_code3三个字母的国家/地区代码,例如“RUS”,“USA”
$geoip_city_country_name国名,例如“俄罗斯联邦”,“美国”
$geoip_dma_code根据Google AdWords API中的地理位置定位,美国的DMA区域代码(也称为“都市代码”)
$geoip_latitude纬度
$geoip_longitude经度
$geoip_region双符号国家区域代码(地区,领土,州,省,联邦土地等),例如“48”,“DC”
$geoip_region_name国家地区名称(地区,领土,州,省,联邦土地等),例如“莫斯科市”,“哥伦比亚特区”
$geoip_city城市名称,例如“莫斯科”,“华盛顿”
$geoip_postal_code邮政编码

geoip_org

Syntax:	geoip_org file;
Default: 
Context: http


参数名描述
$geoip_org组织名称,例如“墨尔本大学”

geoip_proxy

Syntax:	geoip_proxy address | CIDR;
Default: 
Context: http

定义可信地址。当请求来自可信地址时,将使用来自X-Forwarded-For请求头字段的地址。

geoip_proxy_recursive

Syntax:	geoip_proxy_recursive on | off;
Default: geoip_proxy_recursive off;
Context: http

如果禁用递归搜索,则不使用与其中一个可信地址匹配的原始客户端地址,而是使用X-Forwarded-For中发送的最后一个地址。如果启用递归搜索,则不使用与其中一个可信地址匹配的原始客户端地址,而是使用在X-Forwarded-For中发送的最后一个不可信地址。

6.配置教程

服务目录

/etc/nginx/conf.d
|-geoip.conf

geoip.conf

geoip_country /etc/nginx/data/geoip/GeoIP.dat;
geoip_city /etc/nginx/data/geoip/GeoLiteCity.dat;
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/log/geoip.access.log  main;

    location / {
        if ($geoip_country_code != CN) {
            return 403;
        }
        root   /opt/app/code;
        index  index.html index.htm;
    }

   location /myip {
        default_type text/plain;
        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
   }

}

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)