背景
在程序里可以限流。比如,网关。基于userid实现。
但是,在nginx也可以限流。基于ip实现。
目标
维度
1.同一个ip
2.不同ip
同一个ip
1.频率
10/s
2.并发 10/同一时间
不同的ip
总并发数量
比如,配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个连接。
模块
Nginx 限流 电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单、信誉分析,进而根据用户ip信誉权重做相应的流量拦截、限制流量。 Nginx自身有的请求限制模块ngx_http_limit_req_module、流量限制模块ngx_stream_limit_conn_module基于令牌桶算法,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制。
对于提供下载的网站,肯定是要进行流量控制的,例如软件下载站、视频服务等。 它也可以减少一些爬虫程序或者DDOS的攻击。
对这两个模块的介绍的文章也不少,这里转载一篇hopestar的文章: nginx限制IP连接数的范例参考, 因为他介绍的很简洁。
实践
步骤
1.springboot
2.nginx——》tomcat
3.连续并发发起若干请求;
查看服务端access日志,可以看到22秒连续到达3个请求,只处理1个请求;23秒到达两个请求,第一个请求处理,第二个请求被拒绝
监控-nginx的访问日志
xx.xx.xx.xxx - - [22/Sep/2018:23:33:22 +0800] "GET / HTTP/1.0" 200 612 "-" "ApacheBench/2.3"
xx.xx.xx.xxx - - [22/Sep/2018:23:33:22 +0800] "GET / HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
xx.xx.xx.xxx - - [22/Sep/2018:23:33:22 +0800] "GET / HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
xx.xx.xx.xxx - - [22/Sep/2018:23:33:23 +0800] "GET / HTTP/1.0" 200 612 "-" "ApacheBench/2.3"
xx.xx.xx.xxx - - [22/Sep/2018:23:33:23 +0800] "GET / HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
白名单 黑名单
基于ip实现。
黑名单拒绝请求,白名单通过请求。
排队
数据结构
队列。先进先出。
等待排队
超过限制之后,等待排队.
算法
基于token漏桶
限流-限制流量
应用场景
迅雷下载 百度网盘等等。