【一文搞懂Nginx限流,原来这么简单】Nginx现在已经是最火的负载均衡之一 , 在流量陡增的互联网面前 , 接口限流也是很有必要的 , 尤其是针对高并发的场景 。Nginx的限流主要是两种方式:限制访问频率和限制并发连接数 。
![一文搞懂Nginx限流,原来这么简单](http://img.jiangsulong.com/220402/1454425Z5-0.jpg)
文章插图
一、限制访问频率(正常流量)Nginx中我们使用 ngx_http_limit_req_module 模块来限制请求的访问频率 , 基于漏桶算法原理实现 。接下来我们使用 nginx limit_req_zone 和 limit_req 两个指令 , 限制单个IP的请求处理速率 。
语法:limit_req_zone key zone rate
![一文搞懂Nginx限流,原来这么简单](http://img.jiangsulong.com/220402/1454423057-1.jpg)
文章插图
- key :定义限流对象 , binary_remote_addr 是一种key , 表示基于 remote_addr(客户端IP) 来做限流 , binary_ 的目的是压缩内存占用量 。
- zone:定义共享内存区来存储访问信息 , myRateLimit:10m 表示一个大小为10M , 名字为myRateLimit的内存区域 。1M能存储16000 IP地址的访问信息 , 10M可以存储16W IP地址访问信息 。
- rate 用于设置最大访问速率 , rate=10r/s 表示每秒最多处理10个请求 。Nginx 实际上以毫秒为粒度来跟踪请求信息 , 因此 10r/s 实际上是限制:每100毫秒处理一个请求 。这意味着 , 自上一个请求处理完后 , 若后续100毫秒内又有请求到达 , 将拒绝处理该请求 。
![一文搞懂Nginx限流,原来这么简单](http://img.jiangsulong.com/220402/1454424133-2.jpg)
文章插图
burst=20 nodelay 表示这20个请求立马处理 , 不能延迟 , 相当于特事特办 。不过 , 即使这20个突发请求立马处理结束 , 后续来了请求也不会立马处理 。burst=20 相当于缓存队列中占了20个坑 , 即使请求被处理了 , 这20个位置这只能按 100ms一个来释放 。这就达到了速率稳定 , 但突然流量也能正常处理的效果 。
三、限制并发连接数Nginx 的 ngx_http_limit_conn_module 模块提供了对资源连接数进行限制的功能 , 使用 limit_conn_zone 和 limit_conn 两个指令就可以了 。
![一文搞懂Nginx限流,原来这么简单](http://img.jiangsulong.com/220402/145442FI-3.jpg)
文章插图
- limit_conn perip 20:对应的key是 $binary_remote_addr , 表示限制单个IP同时最多能持有20个连接 。
- limit_conn perserver 100:对应的key是 $server_name , 表示虚拟主机(server) 同时能处理并发连接的总数 。注意 , 只有当 request header 被后端server处理后 , 这个连接才进行计数 。
推荐阅读
- 如何快速搞懂密码学
- 一篇文章彻底搞懂base64编码原理
- 民事诉讼?流程及执行宝典 一文看懂,打官司全流程!
- 智能手环是如何测心率的?一文为你揭秘
- 抖音小店怎么开通?一文带你详解开通流程
- 后做号时代,一文看懂做好抖音5亿用户的卖货郎
- 一文了解阿里云CDN HTTP2.0
- 从Nginx、Apache工作原理看为什么Nginx比Apache高效
- 阿胶该怎么吃?一文告诉你,阿胶的做法大全
- PHP-FPM 与 Nginx 的通信机制总结