目录
分流
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模块提供。
国家/城市位置访问控制
安装环境
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 {
#加

本文介绍了如何使用NGINX进行智能流量路由,包括分流客户端请求、地理位置访问控制、连接数和带宽限制。详细讲解了limit_conn和limit_req指令,以及GeoIP模块的应用和配置技巧。
最低0.47元/天 解锁文章
384

被折叠的 条评论
为什么被折叠?



