Nginx(12)-流量管控之分流、访问控制、限制连接速度、限制连接数量、限制带宽

本文介绍了如何使用NGINX进行智能流量路由,包括分流客户端请求、地理位置访问控制、连接数和带宽限制。详细讲解了limit_conn和limit_req指令,以及GeoIP模块的应用和配置技巧。
       NGINX 可智能地路由流量,并根据多个属性控制流量,包括:分流;利用客户端的地理位置进行访问控制;通过速率、连接数和带宽限制流量。

分流

       Nginx可按比例分割客户端请求到不同的服务器上,即分流。

指令

split_clients指令可对来自客户端的请求进行分流。

格式:split_clients string $variable { ... }

为A/B测试创建一个变量,例如:

split_clients "${remote_addr}AAA" $variant {
               0.5%               .one;
               2.0%               .two;
               *                  "";
}

对string(例中"${remote_addr}AAA",参数中添加“AAA”是为了证明这是一个可以包含多个变量的串联字符串。)值使用MurmurHash2进行哈希处理。在给定的示例中,从0到21474835(0.5%)的哈希值对应于$variant变量的值“.one”,从21474836到107374180(2%)的哈希数值对应于值“.tow”,从107374811到4294967295的哈希数值相应于值“”(空字符串)。后面代理或web服务可使用这个变量。

应用

为了更好理解实用,完整例子如下:

1、web服务

http {
    split_clients "${remote_addr}" $web_root_dir {
        33.3%    "/var/www/www_a/";
        *        "/var/www/www_b/";
     }
     server {
 l       listen 80 ;
         root $web_root_dir ;
         location / {
             index index.html;
         }
     }
}

根据不同的客户端地址,1/3引流到www_a, 2/3引流到www_b。 

2、代理服务

#两个集群
upstream lb_srv1 {
    server 10.10.12.45;
    server 10.10.12.46;
}
upstream lb_srv2 {
    server 211.113.168.10:8080;
    server 211.113.168.11:8080;
}
#按2/8分流
split_clients "${remote_addr}" $lb_srv{
    20%   "lb_srv2";
    *     "lb_srv1";
}
server {
    listen 80;
    server_name .example.com;
    location / {
        proxy_pass http://$lb_srv;
    }
}

适用场景

分流适用如下场景:

1、A/B测试。

2、灰度发布:根据部署,用户可以逐步增加路由到新版本的用户百分比,进而将流量慢慢切换到新版本。在推出新版本的代码时,在不同的应用版本之间分割客户端流量非常实用,这可以降低发生错误后带来的。

3、蓝绿部署:在将用户切换到新版本的同时,可以保持旧版本在验证部署期间的可用性。

本功能由ngx_http_split_clients_module模块提供。

国家/城市位置访问控制

       根据请求路由中客户端的物理位置。
       该功能需要安装nginx-module-geoip模块。

安装环境

1、安装nginx-module-geoip模块,RHEL/CentOS NGINX 开源版为例的安装命令:

# yum install nginx-module-geoip

2、下载 GeoIP 国家/地区和城市数据库并解压

# mkdir /etc/nginx/geoip
# cd /etc/nginx/geoip
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gunzip GeoIP.dat.gz
# wget "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
# gunzip GeoLiteCity.dat.gz

国外网站无法下载,可在内网找相关数据。

3、加载模块

在配置文件中增加:

    load_module modules/ngx_http_geoip_module.so;
    load_module modules/ngx_stream_geoip_module.so;

用nginx -s reload重加载即可。

加载数据

http {
    #加
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值