小知识:Nginx geoip模块实现地区性负载均衡

相信做过awstats的都用过开源的geoip.dat  ip数据库,刚好nginx wiki上有geoip 模块,这样就可以实现地区性的负载均衡,但是maxmind 的ip数据库对中国的支持不算太好,不过现在也不错了~

参考文章:http://wiki.nginx.org/NginxHttpGeoIPModule

说下我的环境,我有一台美国linux 服务器,一台美国的windows 2003 ,一台本的XP。机器,其他测试用户都是,QQ群里的朋友,好了开始测试

linux : 75.125.x.x                    //美国

win2003 : 74.55.x.x                // 美国

XP :localhost                     // 北京

测试转发,美国用户~转发到 www.google.cn

电信转发到 我的一台 公网的 apache 默认页面

网通转发到  我的一台 公网业务服务器!!

1.下载安装nginx.

shell $> get http://sysoev.ru/nginx/nginx-0.8.13.tar.gz

shell $> tar zxvf nginx-0.8.13.tar.gz

shell $> cd nginx-0.8.13

shell $>apt-get install libgeoip-dev

shell $> ./configure –prefix=/usr/local/nginx –with-http_flv_module –user=www –group=www –with-http_gzip_static_module –with-http_geoip_module

shell $> make

shell $> make install

2.下载GeoLiteCity.dat.gz 数据库~

shell $> wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

shell $> gzip -d GeoLiteCity.dat.gz

shell $> mv GeoLiteCity.dat /usr/local/nginx/conf/GeoLiteCity.dat

3.修改配置文件实现 地区性质负载

shell $> cd /usr/local/nginx/conf

shell $> cat nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    geoip_city     GeoLiteCity.dat;

    upstream    wangtong {

        server 59.151.X.X;

    }

    upstream    dianxin {

        server 75.125.X.X;

    }

    upstream    USA {

        server www.google.cn;

    }

    sendfile        on;

    keepalive_timeout  65;

    server {

        listen       80;

        server_name 75.125.197.200;

        root    html;

        index   index.html index.htm;

        location / {

               if ($geoip_region ~ “(01|02|03|04|06|07|11|13|14|15|16|21|23|29|30|31|32|33)”) {

                proxy_pass 
http://dianxin$request_uri

;

                }

                if ($geoip_region ~ “(05|08|09|10|12|17|18|19|20|24|25|26)”) {

                proxy_pass 
http://wangtong$request_uri

;

                }

                if ($geoip_city_country_code ~ “US”) {

                proxy_pass 
http://USA$request_uri

;

                }

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

4.测试,用不同地方的机器做测试~

我是北京用户,访问

%小知识:Nginx geoip模块实现地区性负载均衡-猿站网-插图

我是北京用户访问的是默认页面是因为我没有 把 22 数字填加到 配置文件里。我是为了方便测试!大家要是用在生产上要把 22加到

 if ($geoip_region ~ “(05|08|09|10|12|17|18|19|20|24|25|26)”)  

没有匹配到,就访问了默认页面~~

成都朋友帮忙访问:

%小知识:Nginx geoip模块实现地区性负载均衡-1猿站网-插图

广州的朋友帮忙访问:

%小知识:Nginx geoip模块实现地区性负载均衡-2猿站网-插图

河北朋友帮忙访问:

%小知识:Nginx geoip模块实现地区性负载均衡-3猿站网-插图

美国 win2003 访问:

%小知识:Nginx geoip模块实现地区性负载均衡-4猿站网-插图

直接访问 电信的 服务器 和 网通服务器

59.151.X.X;    75.125.X.X;

直接访问  网通 59.151.X.X

%小知识:Nginx geoip模块实现地区性负载均衡-5猿站网-插图

直接访问 电信服务器 75.125.X.X

%小知识:Nginx geoip模块实现地区性负载均衡-6猿站网-插图

下面我来解释一下

if ($geoip_region ~ “(01|02|03|04|06|07|11|13|14|15|16|21|23|29|30|31|32|33)”)

这些数字代表的是中国省份地区~~

表如下:

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”

GeoLiteCity.dat 更多变量请看 wiki 我这里只用到两个变量一个是$geoip_region  一个是$geoip_city_country   第一个是 地区,第二个变量是国家只取 两个字母简写!

geoip_city

syntax: geoip_city path/to/db.dat;

default: none

context: http

The directive indicates the path to the .dat file used for determining countries, regions and cities from IP-address of the client. When set the module makes available the following variables:

$geoip_city_country_code; – two-letter country code, for example, “RU”, “US”. $geoip_city_country_code3; – three-letter country code, for example, “RUS”, “USA”. $geoip_city_country_name; – the name of the country, for example, “Russian Federation”, “United States”. $geoip_region; – the name of region (province, region, state, province, federal land, and the like), for example, “Moscow City”, “DC”. $geoip_city; – the name of the city, for example, “Moscow”, “Washington”. $geoip_postal_code; – postal code.

PS: 我只是根据南方电信,北方网通来区分的~~ 我是北京用户访问的是默认页面是因为我没有 把 22 数字填加到 配置文件里。我是为了方便测试!大家要是用在生产上要把 22加到

 if ($geoip_region ~ “(05|08|09|10|12|17|18|19|20|24|25|26)”)  

网通里~  不过 开源的 geoip 还是有些不准确的~~~只能给他  75 分~~

本文出自 “linuxer” 博客,请务必保留此出处http://deidara.blog.51cto.com/400447/198469
声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:nginx的FastDFS分布式存储模块测试方法

2023-5-18 1:25:44

建站知识

小知识:nginx 目录密码保护的设置方法

2023-5-18 1:44:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索