文档章节

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

eddy_linux
 eddy_linux
发布于 2015/11/05 02:53
字数 524
阅读 177
收藏 2
点赞 0
评论 0

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
粉丝 18
博文 135
码字总数 188789
作品 0
成都
程序员
Nginx的反向代理与负载均衡

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

侯召顺 ⋅ 2017/12/17 ⋅ 0

NGINX服务之负载均衡与反向代理

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

wb57af0d64d0929 ⋅ 2017/12/27 ⋅ 0

NGINX负载均衡

(1)lb配置 配置文件内容 [root@lb conf]# cat nginx.conf worker_processes ; events { worker_connections ; } http { include mime.types; default_type application/octet-stream; send......

rewiner22 ⋅ 2017/03/08 ⋅ 0

腾讯云公网负载均衡技术实现详解

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

互联网架构师 ⋅ 04/27 ⋅ 0

知识点036-Nginx的负载均衡和高可用LVS

Nginx负载均衡 1.1 搭建负载均衡服务的需求 把单台计算机无法承受的大规模并发访问或数据流量分担到多台节点设备上,分别进行处理,减少用户等待响应的时间,提升用户体验; 单个重负载的运算...

侠客行之石头 ⋅ 04/20 ⋅ 0

Linux运维必会的面试题(一)

一、Varnish、Nginx、Squid各自缓存的优缺点 要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择Squid和Varnish。 总结:缓存加速(静态加速、节省宽带、边缘推送):Varnish>S...

何小帅 ⋅ 2017/04/16 ⋅ 0

怎样正确设置remote_addr和x_forwarded_for获取用户真实IP

做网站时经常会用到和这两个头信息来获取客户端的IP,然而当有反向代理或者CDN的情况下,这两个值就不够准确了,需要调整一些配置。 什么是remoteaddr remoteaddr代表客户端的IP,但它的值不...

星逝流 ⋅ 2015/11/11 ⋅ 0

四层、七层负载均衡的区别

一、简介 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一...

yzy121403725 ⋅ 01/03 ⋅ 0

Haproxy 负载均衡算法介绍:

一、Haproxy配置介绍: HaProxy配置(haproxy.cfg)中分为五部分内容(五大组件),可以根据需要选择进行配置。 五大组件:global、defaults、frontend、backend、listen 1、global:参数是进...

哎呀_毅然 ⋅ 2017/06/11 ⋅ 0

求助:关于nginx 转发 双向SSL认证请求 的问题

大家好,对Web 部署方面不太了解,请教些问题: 我想在互联网上对外提供Web服务,现在申请有一个公网固定IP,想通过代理的方式,接受浏览器发过来的请求(基于虚拟域名和默认80端口),通过n...

malf ⋅ 2014/02/21 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 9分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 21分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 54分钟前 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 59分钟前 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部