博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx根据客户端ip地理位置转发到不同服务器上(Geoip+nginx)
阅读量:6637 次
发布时间:2019-06-25

本文共 2111 字,大约阅读时间需要 7 分钟。

hot3.png

1.下载ip数据库

GeoIP.dat.gz

GeoLiteCity.dat.gz

wget 

wget 

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 ;

                }

            #根据某个ip进行转发 

            if ($remote_addr ~ "192.168.1.100"){

                proxy_pass ;

                }

        }

以下是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 ;

                }

如果是解析出来是成都就转发到拉手网上
 05025357_mS8y.jpg
 
05025357_bFgY.jpg 
这里可以看到是北京的ip所以没有转发到拉手网去
修改配置
 if ($geoip_city ~ "Beijing") {

                proxy_pass ;

                }

05025357_6BI7.jpg
 05025357_mK5w.jpg
这里就看出北京的ip就转发到了拉手网
 这样就实现不同地理位置ip代理至不同服务器

转载于:https://my.oschina.net/eddylinux/blog/526075

你可能感兴趣的文章
要不要听听小白学习Linux经验小谈
查看>>
svn服务器部署
查看>>
Eclipse构建Maven项目
查看>>
java相关资料
查看>>
使用Spring Web MVC和Maven构建web项目
查看>>
Should I cache JMS connections and JMS sessions?
查看>>
可以在onCreate或者onResume中start Animation吗?
查看>>
Cocos2dx 搓牌效果
查看>>
hash_map分析
查看>>
java 密码扩展无限制权限策略文件
查看>>
Ubuntu 安装Oracle Java 7 (JDK)
查看>>
python的virtualenv和pip
查看>>
Sublime Text 3 安装 Package Control
查看>>
DoModal 函数的用法
查看>>
Java 持有对象简要笔记
查看>>
http协议
查看>>
CodeIgniter3.0项目推荐
查看>>
日期工具类
查看>>
【远程调用框架】如何实现一个简单的RPC框架(三)优化一:利用动态代理改变用户服务调用方式...
查看>>
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
查看>>