文档章节

nginx 添加 ngx_http_geoip2_module 模块

is_false
 is_false
发布于 2018/07/17 14:25
字数 698
阅读 829
收藏 0

记录一段生产环境nginx添加模块;
获取nginx版本和编译信息

ubuntu@ubuntu$ nginx -V  
nginx version: nginx/1.12.1  
built with OpenSSL 1.0.2g 1 Mar 2016  
TLS SNI support enabled   
configure arguments: ... $nginx编译参数 ...    

下载对应的nginx版本

ubuntu@ubuntu$ wget http://nginx.org/download/nginx-1.12.1.tar.gz 

下载ngx_http_geoip2_module模块

ubuntu@ubuntu$ wget https://github.com/leev/ngx\_http\_geoip2\_module/archive/master.zip

安装一些环境
这里是我少的一些依赖, 具体可以根据自己的报错信息安装其他依赖

$sudo apt-get install libmaxminddb-dev libxslt-dev libxml2-dev libgd2-xpm-dev libgeoip-dev

解压所下载文件并生成模块

ubuntu@ubuntu$ cd nginx-1.12.1/ 
ubuntu@ubuntu$ ./config --$nginx编译参数 --add-dynamic-module=../ngx\_http\_geoip2_module 
ubuntu@ubuntu$ make modules
ubuntu@ubuntu$ ls objs  # 然后会生成objs目录,模块放在此目录下
...
ngx_http_geoip2_module.so
...

加载模块

ubuntu@ubuntu$ sudo cp objs/ngx_http_geoip2_module.so /usr/share/nginx/modules
ubuntu@ubuntu$ cat /etc/nginx/nginx.conf
pid /run/nginx.pid
...
load_module modules/ngx_http_geoip2_module.so;
...
ubuntu@ubuntu$ sudo nginx -c /etc/nginx/nginx.conf -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ubuntu@ubuntu$ sudo /etc/init.d/nginx reload

正常来讲上面的一波操作完成就可以正常使用新加载的模块了.
当然也有不正常的时候:

ubuntu@ubuntu$ sudo nginx -c /etc/nginx/nginx.conf -t
nginx: [emerg] module "/usr/share/nginx/modules/ngx_http_geoip2_module.so" is not binary compatible in /etc/nginx/nginx.conf:6
nginx: configuration file /etc/nginx/nginx.conf test failed

对于nginx添加动态模块的要求:

  • 编译使用的nginx版本必须与正在运行的nginx版本一致
  • 编译使用的configure参数必须与正在运行的nginx -V 一致

但是我使用上面两个一致之后还是提示 not binary compatible.
就有点坑了,经过一番误打误撞最终的解决方案诞生了

ubuntu@ubuntu$ ./configure --with-cc-opt='-DNGX_HTTP_HEADERS'

在config的时候加入了 '-DNGX_HTTP_HEADERS' 如果原有的
nginx -V 有 --with-cc-opt 直接在里面追加就可以.
原因是原有的nginx是通过PPA源安装, 导致出现了兼容问题,详细参考
https://github.com/apache/incubator-pagespeed-ngx/issues/1440#issuecomment-315520779

使用模块

# 在nginx的http中做全局配置
   geoip_city      /usr/share/nginx/Geo/GeoLiteCity.dat;
   geoip_country  /usr/share/nginx/Geo/GeoIP.dat;
   geoip2_proxy_recursive on;
   geoip2_proxy    10.10.0.0/12;
   geoip2 /usr/share/nginx/Geo/GeoLite2-City.mmdb {
           $geoip2_data_city_name city names zh-CN;
           $geoip2_data_state_name subdivisions 0 names zh-CN;
   }
   geoip2 /usr/share/nginx/Geo/GeoLite2-Country.mmdb {
           $geoip2_data_country_name country names zh-CN;
   }

#  在location使用
    proxy_set_header X-city-name $geoip2_data_city_name;
    proxy_set_header X-region-name $geoip2_data_state_name;
    proxy_set_header X-country-name $geoip2_data_country_name;

上面用的.dat 和 .mmdb 从官网可以下到 https://dev.maxmind.com/geoip/legacy/downloadable/
我这里也有
链接: https://pan.baidu.com/s/1grUmMjXnUZ-PK3OYuh8tsQ
密码: igxb

重要提示
线上切记不可以make install, 条件允许可以在本地配置一个跟线上一样的环境把编出来的.so复制到线上

欢迎各位来砖;

© 著作权归作者所有

is_false
粉丝 0
博文 2
码字总数 2288
作品 0
丰台
私信 提问
Tengine 安装和基本使用

简介 Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。官网 准备 下载:http://tengine.taobao.org/download_cn.html 下载 ...

2688
2016/01/18
283
0
初尝nginx模块开发

最近在看《深入理解nginx》这本书,学着写一个nginx的模块。 从官方网站www.nginx.org下载nginx-1.6.0版本 wget http://nginx.org/download/nginx-1.6.0.tar.gz 解压 [root@localhost ~]#tar...

老徐_kevin
2014/05/05
0
0
openresty+lua+nginx_upstream_check_module等其他模块安装

Openresty、Lua、nginxupstreamcheck_module等其他模块安装 1. 软件 LuaJIT LuaJIT-2.1.0-beta2.tar.gz Openresty Openresty-1.9.15.1.tar.gz Nginxupstreamcheck_module nginxupstreamchec......

tommypage
2017/03/27
0
0
初识nginx helloworld模块

1.nginx模块 首先nginx和apache最大的不同就是nginx的模块 不能够动态添加,需要在编译时,指定要添加的模块路径,与nginx源码一起编译。 nginx模块的处理流程: a.客户端发送http请求道ngi...

独钓渔
2016/12/01
110
0
tengine 动态加载模块简单上手

首先解释下 nginx里有各种各样的模块你在编译的时候得先添加进去。 tengine开启了dso动态加载模块的支持,你只需要得到模块包 然后使用tengine的编译工具编译进去使用即可。不需要说哪个模块...

月黑风高杀人夜
2015/07/30
2.4K
2

没有更多内容

加载失败,请刷新页面

加载更多

云栖干货回顾 | 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。AnalyticDB PG通过行存...

大涛学弟
19分钟前
4
0
TL138/1808/6748-EasyEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。开...

Tronlong创龙
24分钟前
3
0
开普勒平台开源版

https://github.com/kplcloud/kplcloud

perofu
27分钟前
4
0
昨天,这项阿里技术再获世界级科技大奖!

第六届世界互联网大会来了!千年水乡古镇乌镇又一次吸引了全世界的目光。 昨天,阿里云自研数据库POLARDB 在会上当选世界互联网领先科技成果。POLARDB解决了企业在云时代的数据库难题,帮助企...

阿里云官方博客
27分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部