文档章节

nginx根据客户端ip地理位置转发到不同服务器上(Geoip+nginx)

eddy_linux
 eddy_linux
发布于 2015/11/05 02:53
字数 524
阅读 352
收藏 2

1.下载ip数据库

GeoIP.dat.gz

GeoLiteCity.dat.gz

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
2.下载安装nginx
 
这里使用tengine 可以动态添加模块

下载和安装就不多说了

这里注意一下安装时添加geoip模块

这里会有一个报错需要添加Geoip的库
安装依赖
rpm -Uvh GeoIP-devel-1.5.1-5.el6.x86_64.rpm 
rpm -Uvh GeoIP-1.5.1-5.el6.x86_64.rpm

 
./configure --prefix=/usr/local/nginx_geoip --with-pcre=/root/pcre-8.36 --with-http_gzip_static_module --with-http_geoip_module

make

make install

gunzip  -d GeoIP.dat.gz#国家数据库

mv GeoLiteCity.dat.gz /usr/local/nginx_geoip/conf/

gunzip -d GeoLiteCity.dat.gz#城市数据库

mv GeoLiteCity.dat /usr/local/nginx_geoip/conf/

3.
nginx.conf配置

在http段中添加

http {

....................

    geoip_city    GeoLiteCity.dat;

    geoip_country GeoIP.dat;

#日志添加地理位置信息'$geoip_country_name $geoip_region $geoip_city'

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' '$geoip_country_name $geoip_region $geoip_city';

}

server段中

以下是根据地域来转发

server {

        listen       9999;

        server_name  _;

        #charset koi8-r;

        access_log  logs/host.access.log access;

        location / {

           # root   html;

           # index  index.html index.htm;

   #省份代码geoip_region  geoip_city是城市名,例如$geoip_region ~ "Chengdu"

            if ($geoip_region ~ "22") {

                proxy_pass http://www.lashou.com;

                }
            #根据某个ip进行转发 

            if ($remote_addr ~ "192.168.1.100"){

                proxy_pass http://www.baidu.com;

                }

        }

以下是geoip_region的省份代码

CN,01,"Anhui"

CN,02,"Zhejiang"

CN,03,"Jiangxi"

CN,04,"Jiangsu"

CN,05,"Jilin"

CN,06,"Qinghai"

CN,07,"Fujian"

CN,08,"Heilongjiang"

CN,09,"Henan"

CN,10,"Hebei"

CN,11,"Hunan"

CN,12,"Hubei"

CN,13,"Xinjiang"

CN,14,"Xizang"

CN,15,"Gansu"

CN,16,"Guangxi"

CN,18,"Guizhou"

CN,19,"Liaoning"

CN,20,"Nei Mongol"

CN,21,"Ningxia"

CN,22,"Beijing"

CN,23,"Shanghai"

CN,24,"Shanxi"

CN,25,"Shandong"

CN,26,"Shaanxi"

CN,28,"Tianjin"

CN,29,"Yunnan"

CN,30,"Guangdong"

CN,31,"Hainan"

CN,32,"Sichuan"

CN,33,"Chongqing"

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

strings GeoLiteCity.dat |grep -i beijing

这样就匹配到了 Beijing,所以我们可以用 Beijing这个城市名。
验证:
 
if ($geoip_city ~ "Chengdu") {

                proxy_pass http://www.lashou.com;

                }
如果是解析出来是成都就转发到拉手网上
 

 
 
这里可以看到是北京的ip所以没有转发到拉手网去

修改配置
 
if ($geoip_city ~ "Beijing") {

                proxy_pass http://www.lashou.com;

                }


 
这里就看出北京的ip就转发到了拉手网

 这样就实现不同地理位置ip代理至不同服务器


© 著作权归作者所有

共有 人打赏支持
eddy_linux
粉丝 21
博文 135
码字总数 188789
作品 0
成都
程序员
私信 提问
微信小程序通过ip获取用户所在城市

在微信小程序中, 获取用户的地理位置是需要权限的, 如果只是获取用户所在的城市信息, 那只需查看用户ip所在的城市就好了, 下面我们就完成获取用户ip的小程序逻辑~ 根据用户ip获取地理位置 根...

木子昭
09/26
0
0
NGINX服务之负载均衡与反向代理

“1”NGINX负载均衡设置(1)轮询算法:每次将请求顺序分配到不同的服务器,通过此算法可以实现请求在多台机器之间的轮询转发。upstream test_svr{server 192.168.1.10:8080;server 192.16...

wb57af0d64d0929
2017/12/27
0
0
Nginx的反向代理与负载均衡

1.1 集群是什么   简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立...

侯召顺
2017/12/17
0
0
Nginx服务器之负载均衡策略(6种)

一、关于Nginx的负载均衡   在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。详情请查看我的另一篇...

左羽
07/17
0
0
腾讯云公网负载均衡技术实现详解

相关阅读: 阿里P7/P8学习路线图——技术封神之路 十几位资深架构师,整理了最新架构师学习体系,分享给大家...... 互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)...

互联网架构师
04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq学习

使用docker安装rabbit docker run -d --hostname my-rabbit --name rabbit -p 8080:15672 rabbitmq:management--hostname:指定容器主机名称--name:指定容器名称-p:将mq端口号映射到本地...

元谷
19分钟前
0
0
想知道谁是你的最佳用户?基于Redis实现排行榜周期榜与最近N期榜

本文由云+社区发表 前言 业务已基于Redis实现了一个高可用的排行榜服务,长期以来相安无事。有一天,产品说:我要一个按周排名的排行榜,以反映本周内用户的活跃情况。于是周榜(按周重置更新...

腾讯云加社区
21分钟前
1
0
函数计算性能福利篇(二) —— 业务冷启动优化

继前一篇《函数计算性能福利篇——系统冷启动优化》,我们再来看看近期函数计算推出的 Initializer 功能之后,带来的一波高能性能优化成果。 背景 函数计算是一个事件驱动的全托管 serverle...

阿里云官方博客
26分钟前
1
0
开源版本说明

1527
28分钟前
2
0
Mysql经验-------持续更新

单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。 说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

DoLo-lty
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部