限流 nginx

309 阅读2分钟

背景

在程序里可以限流。比如,网关。基于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漏桶

限流-限制流量

应用场景
迅雷下载 百度网盘等等。

参考

colobu.com/2015/10/26/…

www.cnblogs.com/biglittlean…

www.jianshu.com/p/2cf3d9609…

juejin.cn/post/684490…

segmentfault.com/a/119000001…

toutiao.io/posts/r9wf3…

blog.battcn.com/2018/07/27/…