Nginx geoip模块实现地区性负载均衡_nginx

相信做过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.测试,用不同地方的机器做测试~

我是北京用户,访问

 

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

 

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

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

 

成都朋友帮忙访问:

 

广州的朋友帮忙访问:

 

河北朋友帮忙访问:

 

美国 win2003 访问:

 

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

 

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

 

直接访问  网通 59.151.X.X

 

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

 

 

下面我来解释一下

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

时间: 2024-09-21 04:46:26

Nginx geoip模块实现地区性负载均衡_nginx的相关文章

nginx+iis实现简单的负载均衡_nginx

最近在研究分布式系统架构方面的知识,包括负载均衡,数据库读写分离,分布式缓存redis等.本篇先从负载均衡服务架构入手,关于负载均衡百度百科的定义如下:负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 我的解释:一项任务交由一个开发人员处理总会有上限处理能力,这时可以考虑增加开发人员来共同处理这项任务,多人处理同一项任务时就会涉及到调度问题,即任务分配,这和多线程

nginx 详解反向代理负载均衡

什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式. 实现这个反向代理能力并不能算是一个特别复杂的任务,但是在负载均衡中要求特别高的效率,这样实现起来

Linux环境下Nginx 通过upstream如何配置负载均衡以及实现

一,服务器准备情况,四台: 1,前段服务器: 192.168.1.112  hosts定向测试域名nginx.21yunwei.com 192.168.1.113 备用前端服务器. 后端web服务器池web_pools: 192.168.1.102 192.168.1.103 2,环境:统一centos 6 前端服务器安装nginx.环境安装这里就不写了,可以参考文章<linux下如何安装nginx环境配置>部署nginx环境. 后端web服务器 池统一安装apache:yum install

Nginx+Keepalived实现Web服务器负载均衡

说明: 操作系统:CentOS 5.X 64位 Web服务器:192.168.21.127.192.168.21.128 站点:bbs.111cn.net和sns.111cn.net部署在两台Web服务器上 实现目的: 增加两台服务器(主主模式),通过Nginx+Keepalived实现Web服务器负载均衡 架构规划: Nginx服务器:192.168.21.129.192.168.21.130 虚拟服务器(VIP):192.168.21.252.192.168.21.253 部署完成之后: 1

Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案_nginx

负载均衡的基本概念 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用.最大化吞吐率.最小化响应时间.同时避免过载的目的. 使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性.负载平衡服务通常是由专用软体和硬件来完成. 负载平衡最重要的一个应用是利用多台服务器提供单一服务,这种方案有时也称之为服务器农场.通常,负载平衡主要应用于Web网站,大型的Internet

Nginx与Tomcat实现动静态分离和负载均衡_nginx

本文介绍了Nginx与Tomcat实现动静态分离和负载均衡,所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片.html等静态的文件,tomcat(或weblogic)处理jsp.do等动态文件,从而达到动静页面访问时通过不同的容器来处理. 一.Nginx简介: Nginx一个高性能的HTTP和反向代理服务器, 具有很高的稳定性和支持热部署.模块扩展也很容易.当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器,N

windows安装nginx部署步骤图解(反向代理与负载均衡)_nginx

一.下载安装Nginx(本文环境为windows xp 32bit环境) 解压nginx-1.0.11.zip,进入nginx-1.0.11,在命令行中执行命令让Nginx启动.具体操作如下图: 测试是否安装成功,输入地址:http://localhost:8090 浏览器显示结果如下图: OK,Nginx部署成功了. 二.关于Nginx的反向代理配置. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器

Nginx + Tomcat 动静分离实现负载均衡(转)

0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份Nginx.conf配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Nginx实现网站多机负载均衡配置方法

Nginx的高并发特性就不用多说了,单机静态并发能承受大压力测试,但并不代表在搭载后端的情况下依然保持高并发,因为后端动态处理才是并发瓶颈.nginx作者初衷是为邮件提供多机反向代理,而这特性也正好能用在其他网络服务上,因为这是nginx原生基础服务,比apache等其他服务器需提供外部插件的实现形式显得更快捷高效. 传统负载均衡的方法是在后端服务器前设置一台前端服务器负责总调度,这是最简单的方式,当前端搭载的是nginx负责单点均衡,后端服务可以是任意web服务,譬如apache,tomcat