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

  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. 适合产品经理的十本书 From 俞军

    (转自俞军,如有侵权,请评论区留言,我会尽快删除:) 适合产品经理的十本书 俞军 入门三本书:社会心理学 阿伦森 插图第七版:特别好,适合成为“产品经理的第一本书”第一本经济学:经济学帮助人们洞察世事 ...

  2. Apache 容器 Directory Location Files 及htaccess文件

    配置段容器的类型 相关模块 core mod_proxy 相关指令 <Directory> <DirectoryMatch> <Files> <FilesMa ...

  3. 解决mysql登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)问题

    问题描述: 在ubuntu14.04上安装完MYSQL后,MYSQL默认给分配了一个默认密码,但当自己在终端上使用默认密码登录的时候,总会提示一个授权失败的错误. 报错信息:Access denied ...

  4. 同步锁——ReentrantLock

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 Lock接口简介 在JUC包下面有一个java.util ...

  5. git rm -r --cached解决已提交的文件在.gitignore中加入忽略后无效的问题。

    有时候,发现有不该提交的文件已经提交后,仅仅在.gitignore中加入忽略是不行的.这个时候需要执行: git rm -r --cached 文件/文件夹名字 去掉已经托管的文件,然后重新提交: g ...

  6. Hadoop搭建record下

    前言 先说一下当前环境:Ubuntu18.04 jdk1.8 Hadoop选用-2.6.0-cdh5.15.1 用户名:supershuai-VirtualBox Hadoop的下载地址:http:/ ...

  7. pikachu-跨站脚本漏洞(XSS)

    一.跨站脚本漏洞概述 1.1 什么是XSS漏洞?     XSS是一种发生在Web前端的漏洞,其危害的对象也主要是前端用户. 1.2 XSS如何攻击? 二.跨站脚本漏洞类型及测试流程 2.1 跨站脚本 ...

  8. 二次开发的Selenium Demo版本

    文件名你们自己命名就好,至于为什么要重写强制位移的函数呢,是因为Mac上Selenium不支持拖拽,只能这样做了,4个文件--------------------------------------- ...

  9. UML之三、建模元素(2)

    本章继续介绍建模元素 https://blog.csdn.net/bit_kaki/article/details/78471760 1:边界 任何一个对象都有一个边界,外界只能通过这个边界来认识对象 ...

  10. iOS编程实战 — 新的UI范式

    iOS 7给苹果设备带来了全新的用户界面(UI).iOS 7在UI上的变化是自其诞生以来最大的.iOS 7专注于三个重要的特点:清晰.依从和层次.理解这三个特点很重要,因为这有助于设计跟原生的系统内置 ...