centos7 下 安装GeoIP2,在nginx中根据ip地址对应的国家转发请求
最近有个需求是根据用户的地理位置,访问不同的服务器,比如国外用户访问国外的服务器,国内的用户访问国内的服务器,实现的思路主要两种:
- 智能dns,这个需要在阿里云中注册为企业版才有提供
- nginx中使用geoip这个扩展
升级企业版需要用户的身份认证,比较麻烦,所以决定采用第二钟办法,准备好时间开搞。
网上搜索了下nginx安装GeoIP,才发现geoip这个库已经过时了,现在nginx推荐使用geoip2这个库,我们可以从nginx的扩展的网站上看到。

而且geoip数据库已经不更新了,官方也不提供下载了(http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry,这个地址下的文件无效),搜索到的数据文件都是8年前的。
辛苦找到的一些参考资料,瞬间就感觉没什么用了,比如:
https://blog.csdn.net/tadwork/article/details/80742904
https://blog.csdn.net/guyan0319/article/details/78845159
https://blog.csdn.net/weixin_33938733/article/details/92048497
https://www.cnblogs.com/wenyule/p/11071800.html(文章中居然说:geoip2已经有了,安装另寻),看到这句话,有点子失落。
https://www.wandouip.com/t5i172594/
https://blog.csdn.net/u012600104/article/details/80887422
so,只能去找geoip2的使用。
经过baidu,google发现了下列参考文章:
https://www.getpagespeed.com/server-setup/nginx/upgrade-to-geoip2-with-nginx-on-centos-rhel(一开始感觉如获至宝,敲完命令后发现,cnm居然要订阅才能yum install,本来这个库就是免费的,这么搞有意思吗)
关键文章在这里:
https://www.westidc.top/archives/469
https://www.azio.me/how-to-install-ngx_http_geoip2_module/
https://www.24kplus.com/linux/404.html(链接404,还以为是错的)
基本的安装思路:
- 从https://github.com/leev/ngx_http_geoip2_module.git 拉取geoip2的源码
- 结合nginx的源码,通过add-dynamic-module或者add-module,两者的区别在于,动态加载模块还是静态加载,我这里采用的是静态加载方便以后直接拷贝到别的服务器,而且不需要load_module
- 如果没有装过nginx,则使用make install,如果装过则使用make,完成编译后在objs中可以找到nginx,然后替换已有的nginx,替换之前可以备份。重启nginx后,可以使用nginx -V来查看是否得到了带geoip2扩展的nginx

得到带扩展的nginx后,就需要获取geoip2的数据文件,后续需要在nginx中使用,获取数据文件的方式也有两种:
- 到官方网站下载,https://www.maxmind.com/,注册后,可以在后台找到Download Databases,可以手动下载(缺点:每次需要登录网站下载,完成后,在传到服务器上)
- 使用geoipupdate这个命令,根据官网的介绍,只要配置好GeoIP.conf,一个命令就可以完成数据文件的更新
我们采用第二种方式
- 先去官网完成注册,而后根据提示找到License Keys,创建一个license,完成后会提示下载GeoIP.conf。
- 在服务器上安装geoipupdate,安装这个命令之前,先卸载自己服务器上已经安装的版本(不知道为什么服务器是什么时候装的旧版本),使用yum remove geoipupdate或者yum remove geoip完成卸载。
- 在https://github.com/maxmind/geoipupdate/releases下载对应的rpm文件,我这里下载的是geoipupdate_4.2.2_linux_amd64.rpm,rpm -i geoipupdate_4.2.2_linux_amd64.rpm 完成安装,geoipupdate -V 查看安装后的版本
- 将GeoIP.conf上传到服务器的 /etc目录下,执行geoipupdate,完成数据文件的下载,下载的数据文件放在,/usr/share/GeoIP,GeoLite2-ASN.mmdb,GeoLite2-City.mmdb,GeoLite2-Country.mmdb
接下来,我们可以在nginx中用geoip2的扩展命令,来调用这些数据文件,并做相应的转发。
centos7 下 安装GeoIP2,在nginx中根据ip地址对应的国家转发请求的更多相关文章
- CentOS7下安装ELK(nginx 、elasticsearch-5.1.1、logstash-5.1.1、kibana-5.1.1)
nginx: #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org/en/docs/http/ngx_htt ...
- centos7下安装、配置Nginx、设置Nginx开机自启动
测试环境: [root@centos-linux ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core) [root@cento ...
- 学习笔记(1)centos7 下安装nginx
学习笔记(1)centos7 下安装nginx 这里我是通过来自nginx.org的nginx软件包进行安装的. 1.首先为centos设置添加nginx的yum存储库 1.通过vi命令创建一个rep ...
- Windows和Linux(Centos7)下安装Nginx
安装Nginx 这篇记录只不过做了一个简单总结,如果对这块没什么概念的话可以看一下知乎的这篇文章 https://zhuanlan.zhihu.com/p/83890573 window下安装 win ...
- centos7 下 安装部署nginx
centos7 下 安装部署nginx 1.nginx安装依赖于三个包,注意安装顺序 a.SSL功能需要openssl库,直接通过yum安装: #yum install openssl b.gzip模 ...
- CentOS7 下 安装 supervisor以及使用
CentOS7 下 安装 supervisor 以及使用 手动安装 [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/py ...
- Linux CentOs7 下安装 redis
Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装 命令如下 $ yum install gcc-c++ $ wget ht ...
- 烂泥:Windows下安装与配置Nginx web服务器
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章,我们使用nginx都是在linux环境下,今天由于工作的需要.需要在windows环境也使用nginx搭建web服务器. 下面记录下有关ng ...
- CentOS 7 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)
原文 CentOS 7 下安装 LEMP 服务(nginx.MariaDB/MySQL 和 php) LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作 ...
随机推荐
- 全网最详细的Linux命令系列-Screen远程会话命令
screen 管理你的远程会话 你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份.ftp 传输等等.通常情况下我们都 ...
- Solr搜索解析及查询解析器用法概述
一.简介 大多数查询都使用 了标准的Solr语法.这种语法是Solr最常见的,由默认查询解析器负责处理.Solr的默认查询解析器是Lucene查询解析器[LuceneQParserPlugin类实现] ...
- ubuntu下安装secureCRT(含破解方法)
一.下载SecureCRT安装文件及破解文件: 链接: https://pan.baidu.com/s/1A7opflFKSUi13PkzVCnhDQ 密码: gbf5 二.下载完成安装文件后安装Se ...
- 使用ASDM 管理 ciscoASA设备
用vm虚拟机模拟了一台 ASA设备 自适应安全设备软件为 ASA8.25 asdm镜像为asdm-6.49.bin 用客户端连接时,一定要安装java jre,版本我是用的是7,6应该也可以. ...
- JS中new的实现原理及重写
提到new,肯定会和类和实例联系起来,如: function Func() { let x = 100; this.num = x + } let f = new Func(); 上面的代码,我们首先 ...
- [Linux] ubuntu下yarn依赖管理工具的安装和使用
Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码, 或者分享自己的代码.Yarn 做这些快捷.安全.可靠,所以你不用担心什么.通过Yarn你可以使用其他开发者针对不同问题的 ...
- hadoop之HDFS核心类Filesystem的使用
1.导入jar包,要使用hadoop的HDFS就要导入hadoop-2.7.7\share\hadoop\common下的3个jar包和lib下的依赖包.hadoop-2.7.7\share\hado ...
- linux文件、文件夹操作
1. pwd 查看当前所在的路径 2. ls 显示文件列表 ls -l 显示文件列表以及详情 ls -la 显示所有文件列表以及详情(包含隐藏文件) 注意:ls -l 相当于ll 例如 ...
- .NET CORE(C#) WPF 抽屉式菜单
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF 抽屉式菜单 阅读导航 本文背景 代码实现 本文参考 源码 ...
- 给test函数加个装饰器!
import timedef timer(func): def deco(*args,**kwargs): start_time=time.time() func(*args,**kwargs) st ...