本文共 1421 字,大约阅读时间需要 4 分钟。
一般对外暴露的系统在促销或黑客攻击时会面临大量高并发请求,为了防止系统被瞬间流量压垮,限流是必不可少的保护手段。本文将介绍Nginx的三种限流方式及其实际应用。
通过Nginx官方文档可以了解三种主要的限流方法:
limit_conn_zone
limit_conn_zone $binary_remote_addr zone=one:10m;server { ... limit_conn one 10; ...}该配置可设置客户端IP的并发连接数上限,值为10表示单IP最多可建立10个连接。
limit_req_zone
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;server { ... limit_req zone=req_one burst=120; ...}该配置可对客户端IP的请求频率进行限流。rate=1r/s表示每秒每个IP最多发送1个请求,burst=120则允许短期内积累120个未处理请求。
ngx_http_upstream_module
ngx_http_upstream_module 在限流方面具有更高级功能。max_conns参数可用于对后端服务器进行限流,适用于分布式系统。upstream backend 127.0.0.1:8080 max_conns=10;upstream backend 127.0.0.1:8081 max_conns=10;
该配置可对后端服务器的连接数进行限制,max_conns=10 表示单个后端服务器最多接收10个连接。
max_conns 是针对单个worker_processes的,不是所有worker_processes的总和。通过实际测试可以发现:
limit_conn_zone或limit_req_zone时,对于单个IP的限流效果较为明显。ngx_http_upstream_module 的限流效果更为稳定,尤其是在分布式系统中。如果需要使用ab工具进行测试,可以按照以下步骤安装:
yum install apr-utilyum install yum-utilsmkdir /optcd /optmkdir abtmpcd abtmpyum install yum-utils.noarchyumdownloader httpd-tools*rpm2cpio httpd-*.rpm | cpio -idmv
使用命令:
./ab -c 100 -n 10000 http://127.0.0.0.1/index.html
可以发送100个并发请求,共10000次请求。
转载地址:http://thqs.baihongyu.com/