最近有个需求是根据用户的地理位置,访问不同的服务器,比如国外用户访问国外的服务器,国内的用户访问国内的服务器,实现的思路主要两种:

  1. 智能dns,这个需要在阿里云中注册为企业版才有提供
  2. 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,还以为是错的)

基本的安装思路:

  1. 从https://github.com/leev/ngx_http_geoip2_module.git 拉取geoip2的源码
  2. 结合nginx的源码,通过add-dynamic-module或者add-module,两者的区别在于,动态加载模块还是静态加载,我这里采用的是静态加载方便以后直接拷贝到别的服务器,而且不需要load_module
  3. 如果没有装过nginx,则使用make install,如果装过则使用make,完成编译后在objs中可以找到nginx,然后替换已有的nginx,替换之前可以备份。重启nginx后,可以使用nginx -V来查看是否得到了带geoip2扩展的nginx

得到带扩展的nginx后,就需要获取geoip2的数据文件,后续需要在nginx中使用,获取数据文件的方式也有两种:

  1. 到官方网站下载,https://www.maxmind.com/,注册后,可以在后台找到Download Databases,可以手动下载(缺点:每次需要登录网站下载,完成后,在传到服务器上)
  2. 使用geoipupdate这个命令,根据官网的介绍,只要配置好GeoIP.conf,一个命令就可以完成数据文件的更新

我们采用第二种方式

  1. 先去官网完成注册,而后根据提示找到License Keys,创建一个license,完成后会提示下载GeoIP.conf。
  2. 在服务器上安装geoipupdate,安装这个命令之前,先卸载自己服务器上已经安装的版本(不知道为什么服务器是什么时候装的旧版本),使用yum remove geoipupdate或者yum remove geoip完成卸载。
  3. 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 查看安装后的版本
  4. 将GeoIP.conf上传到服务器的 /etc目录下,执行geoipupdate,完成数据文件的下载,下载的数据文件放在,/usr/share/GeoIP,GeoLite2-ASN.mmdb,GeoLite2-City.mmdb,GeoLite2-Country.mmdb

接下来,我们可以在nginx中用geoip2的扩展命令,来调用这些数据文件,并做相应的转发。

centos7 下 安装GeoIP2,在nginx中根据ip地址对应的国家转发请求的更多相关文章

  1. 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 ...

  2. centos7下安装、配置Nginx、设置Nginx开机自启动

    测试环境: [root@centos-linux ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core) [root@cento ...

  3. 学习笔记(1)centos7 下安装nginx

    学习笔记(1)centos7 下安装nginx 这里我是通过来自nginx.org的nginx软件包进行安装的. 1.首先为centos设置添加nginx的yum存储库 1.通过vi命令创建一个rep ...

  4. Windows和Linux(Centos7)下安装Nginx

    安装Nginx 这篇记录只不过做了一个简单总结,如果对这块没什么概念的话可以看一下知乎的这篇文章 https://zhuanlan.zhihu.com/p/83890573 window下安装 win ...

  5. centos7 下 安装部署nginx

    centos7 下 安装部署nginx 1.nginx安装依赖于三个包,注意安装顺序 a.SSL功能需要openssl库,直接通过yum安装: #yum install openssl b.gzip模 ...

  6. CentOS7 下 安装 supervisor以及使用

    CentOS7 下 安装 supervisor 以及使用 手动安装 [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/py ...

  7. Linux CentOs7 下安装 redis

    Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装  命令如下 $ yum install gcc-c++ $ wget ht ...

  8. 烂泥:Windows下安装与配置Nginx web服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章,我们使用nginx都是在linux环境下,今天由于工作的需要.需要在windows环境也使用nginx搭建web服务器. 下面记录下有关ng ...

  9. CentOS 7 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)

    原文 CentOS 7 下安装 LEMP 服务(nginx.MariaDB/MySQL 和 php) LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作 ...

随机推荐

  1. bind() 理解 【转】

    bind()可稍后执行  call()  apply() 为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chro ...

  2. Spring学习笔记:自动创建Proxy

    为什么需要自动创建Proxy 手动为所有需要代理的类用ProxyFactoryBean创建代理Proxy需要大量的配置. 这样如果需要代理的类很多,配置就很繁琐,而且也不便于xml配置的维护. 因此S ...

  3. 自定义内建模块 - Python Build Your Own Built-In Module

    在 python 中, 用户可以通过 py 文件创建自定义的 module, 也可以通过 C 创建 dll, 扩展 python module. 当用户在一个正在编辑的模块 module 中, 引入( ...

  4. finalize的用法

    public class GC {          public static GC SAVE_HOOK = null;          public static void main(Strin ...

  5. Centos 7 主要命令改动 service chkconfig iptables

    1.service.chkconfig => systemctl seivice和chkconfig 是linux上的常用命令在centos7上被systemctl代替. CentOS 7 使用 ...

  6. mac下搭建http服务器(apache+php),使用homebrew升级php

    新版mac依旧预装了 Apache ,但是已经不能在 「系统偏好设置」中的「Web 共享」来开启了,需要手动通过命令行开启. 启动Apache 启动:sudo apachectl start 停止:s ...

  7. UWP App国际化的两种实现

    开发App,我们都会标配简体中文和英文两种语言.至于你加多少种,取决于你的客户市场.无论如何,英语是必不可少的. UWP平台里面,微软也提供了一种默认的国际化方案,即修改Resources.resw资 ...

  8. StarUML之八、StarUML的Entity-Relationship Diagram(实体关系图)示例

    数据库表关系设计也是常有场景,本章介绍如何设计一个实体关系图 1:新建项目,在Model Explore中Add Diagram | ER Diagram到指定的元素中: 2:从Toolbox中创建E ...

  9. 盒模型大小取决于它的padding,margin,border数值

    盒模型规定了元素框处理元素内容width与height值.内边距padding.边框border 和 外边距margin 的数值大小.边框内的空白是内边距padding,边框外的空白是外边距margi ...

  10. wordpress 配置坑详解

    首先 经过我测试,php74模块没有支持apache的.所以升级到php74 之后,php无法使用. 最基本的函数phpinfo 调用不出来,没有相关的模块. 安装mariadb 10.4 之后发现, ...