文档章节

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

eddy_linux
 eddy_linux
发布于 2015/11/05 02:53
字数 524
阅读 225
收藏 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
粉丝 18
博文 135
码字总数 188789
作品 0
成都
程序员
Nginx的反向代理与负载均衡

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

侯召顺
2017/12/17
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服务器之负载均衡策略(6种)

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

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

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

互联网架构师
04/27
0
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
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
0
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0
SSE(Server Send Event 服务端发送事件)

package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframe......

Canaan_
今天
0
0
jvm调优

1.jvm运行模式 client模式:启动快,占用内存少,jit编译器生成代码的速度也更快. server模式:主要优势在于代码优化功能,这个功能对于服务器应用而言尤其重要. tiered server模式:结合了client与...

Funcy1122
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部