Nginx的GeoIp模块的应用与使用

使用GeoIP模块的原因(Why):由于项目的需要,需要对不同城市访问的客户进行请求转发,eg:

当天津用户A访问www.XXXX.com的时候,Nginx把这个请求转发到天津的服务器以及天津的域名上去,浏览器自动跳转tj.XXXX.com

当广州用户B访问www.XXXX.com的时候,Nginx把这个请求转发到广州的服务器以及广州的域名上去,浏览器自动跳转gz.XXXX.com

使用GeoIP模块的目的(What):博主理解为两个层面,第一技术层级的,可以减轻某个服务器的负载,做到负载均衡的效果;第二业务层级的,可以是用户得到更好的交互效果,比如想搜房网 找房的首页是当地区域的数据等等

使用GeoIP模块的时机(When):博主理解为两个层面,第一技术层级的,如果网站的访问量特别大的时候可以使用这个模式,有效的减轻了某些服务器的资源消耗;第二业务层级的,当业务有次需要的时候,换句话说当在某个城市当地有了服务点的时候需要使用此功能

使用GeoIP模块的应用(Where):博主理解为Nginx的容器上进行配置,顾名思义 GeoIP是Nginx的编译模块,当然要在Nginx上使用

使用GeoIP模块的人群(Who):当然是运维工程师了,叫码农来配置他们也不会啊!

使用GeoIP模块的方法(How):下面将阐述如何使用GeoIP这个模块



首先下载需要的软件包:Linux System、Nginx1.8.1、echo-nginx-module-masterGeoIP.dat  GeoLiteCity.dat

注:博主在Linux的Ubuntu12.04和Centos 6上使用过此模块、对Nginx1.8.1和Nginx1.4.2两个版本进行操作过。

步骤一、编译Nginx原有的参数保持不便需要添加两个参数分别为--add-module=/usr/src/echo-nginx-module-master和--with-http_geoip_module两个参数

步骤二、make

步骤三、make install

查看是否安装成功

步骤四、修改Nginx的配置文件在http段添加两行参数分别为:

geoip_country /var/aeoip/GeoIP.dat;
geoip_city /var/aeoip/GeoLiteCity.dat;

添加一个新的Server段如下:

server {
       listen       9999;
       server_name  localhost;

       location /hello {
               default_type text/plain;
               echo $geoip_city ;
               echo $geoip_country_code;
               echo 测试Nginx的geoIP模块是否成功?;
               }
 }

步骤五、添加Ngixn的变量 修改fastcgi_params文件,添加内容如下:

#geo
fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;

步骤六、测试 使用外网的客户端访问 http://HostIp:9999/hello

至此Nginx的GeoIP模块安装成功。

PS1:参数介绍

$geoip_country_code - 两个字母的国家代码,如:"RU", "US"。

$geoip_country_code3 - 三个字母的国家代码,如:"RUS", "USA"。

$geoip_country_name - 国家的完整名称,如:"Russian Federation", "United States"(如果可用)。

$geoip_region - 地区的名称(类似于省,地区,州,行政区,联邦土地等),如:"Moscow City", "DC"(如果可用)。

$geoip_city - 城市名称,如"Moscow", "Washington"(如果可用)。

$geoip_postal_code - 邮政编码(如果可用)。

$geoip_city_continent_code(如果可用)。

$geoip_latitude - 所在维度(如果可用)。

$geoip_longitude - 所在经度(如果可用)。

PS2:关于Nginx 使用geo的转发请求本文没有阐述,下面资料借鉴网络资料仅供参考

比如:

location /{
    if ($geoip_city = Guangzhou) {
        root /data/web/guangzhou;
    }
    if ($geoip_region = “30” ) {
        root /data/web/guangdong;
    }
}

或者

if ($geoip_region = 30) {
    rewrite ^/index.html http://www.renzhemao.com/home.html permanent;
}

当ip来自广东时候,把首页重定向到home.html.

或者

location /geoip/ {
    rewrite .* /?country=$geoip_country_code;
}

当不确定具体是否有城市名可以用strings命令查看字符串,比如:

strings GeoLiteCity.dat |grep -i guangzhou

这样就匹配到了 Guangzhou ,所以我们可以用 Guangzhou这个城市名。

当然变量支持正则匹配,比如:
if ($geoip_region ~ “(30|31)”)

我们测试时候可能不一定准,因为我们用的数据源是免费的,具体可以在官网查询:http://www.maxmind.com/en/geoip_demo

参考文献:http://www.ttlsa.com/nginx/using-nginx-geo-method/

http://ju.outofmemory.cn/entry/16264

http://www.tuicool.com/articles/6femi2

http://shouce.jb51.net/nginx/OptionalHTTPmodules/GeoIP.html

https://www.aliyun.com/zixun/content/3_12_518421.html

http://ju.outofmemory.cn/entry/96242

http://www.zybang.com/question/fe24b27b69b842690db277d2246c60a2.html

时间: 2024-08-05 16:00:49

Nginx的GeoIp模块的应用与使用的相关文章

Nginx结合GeoIP库

1. 编译nginx时带上geoip模块 # wget http://nginx.org/download/nginx-x.x.x.tar.gz # tar zxvf nginx-x.x.x.tar.gz # cd nginx-x.x.x # ./configure --with-http_geoip_module 其余编译选项请自行填补 # make; make install 2. 下载可以读取GeoIP数据库的工具 # wget http://geolite.maxmind.com/dow

客户端灰度发布,NGINX+GeoIP2+GeoIP Database

需求的产生 (分地区更新) 我们公司呢是做电商平台的,其主打商品里有一款智能饮水机产品,而每台智能饮水机产品都是装在全国客户的家里.为了售后维护需要服务端如何保存数据并传回这块实现较简单,而在远程展示水机的余额.归属地.出水的质量等功能这块是由水机自身所镶嵌的一块智能PAD屏所完成,其PAD内部安装的是安卓系统:在由开发完成新功能的开发后需迭代智能PAD屏内部安卓系统APK版本时,在更新版本这块我们一直做的方法是全量更新不做任何更新上的限制.但随着业务量的增加全国大概有30万台水机版本需要更新,

Mac系统安装nginx+rtmp模块

1.安装命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 如果安装后, 想要卸载 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" 2.安装nginx 先clone nginx项目到本地 brew t

nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。

ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module   --add-module=/data/software/lnmp1.

【Nginx】核心模块ngx_events_module

核心模块ngx_events_module是一个专门用于管理事件模块的模块.它的实现很简单,下面是该模块的定义: ngx_module_t ngx_events_module = { NGX_MODULE_V1, &ngx_events_module_ctx, /* module context */ ngx_events_commands, /* module directives */ NGX_CORE_MODULE, /* module type */ NULL, /* init mast

【Nginx】ngx_event_core_module模块

ngx_event_core_module模块属于事件模块,它是其它事件类模块的基础.它主要完成以下任务: 创建连接池 决定使用哪些事件驱动机制 初始化将要使用的事件模块 下面分析该模块的代码. ngx_event_core_module的ngx_command_t数组定义如下: /* ngx_event_core_module对7个配置项感兴趣 */ static ngx_command_t ngx_event_core_commands[] = { /* 一个worker进程的最大TCP连接

Nginx 配置 fastdfs-nginx-module 模块

上篇介绍了FastDFS的安装,这里主要是给NG安装fastdfs-nginx-module 模块,来完成FastDFS的上传与下载 安装 Nginx 和 fastdfs-nginx-module [[email protected] softwares]#wget -c https://nginx.org/download/nginx-1.10.1.tar.gz fastdfs-nginx-module 直接用附件中的,网上下载的貌似有很多很问题   [[email protected] so

nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_module模块可以用来创建变量,其值依赖于客户端IP地址.geo指令语法: geo [$address] $variable { ... }默认值: -配置段: http定义从指定的变量获取客户端的IP地址.默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量获得.例

php5.5安装及phpmyadmin&nginx配置php模块

安装php5.5: 下载源地址:rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm rpm包安装:yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php55w-gd.x86_64 php55w-ldap.x86_64 php55w-mbstring.x86_64 php55w-mcrypt.x86_64 php55w-mysql.x86_64 php55w-