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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介:
说下我的环境,我有一台美国linux 服务器,一台美国的windows 2003 ,一台本的XP。机器,其他测试用户都是,QQ群里的朋友,好了开始测试
linux : 75.125.x.x                    //美国
win2003 : 74.55.x.x                // 美国
XP :localhost                     // 北京
 
测试转发,美国用户~转发到  www.google.cn
电信转发到 我的一台 公网的 apache 默认页面
网通转发到  我的一台 公网业务服务器!!
 
1.下载安装nginx.
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 $> 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 分~~


本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/198469,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
19天前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
108 59
|
1月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
136 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
15天前
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
20 3
|
19天前
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
|
28天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
115 7
|
26天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
29天前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
59 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
1月前
|
开发框架 负载均衡 前端开发
Nginx负载均衡
Nginx负载均衡
|
1月前
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置
|
1月前
|
负载均衡 算法 Java
java中nginx负载均衡配置
java中nginx负载均衡配置
36 0
下一篇
无影云桌面