Nginx限流和黑名单配置

简介: Nginx限流和黑名单配置
+关注继续查看

1 背景介绍

为了防止一些抢票助手所发起的一些无用请求,我们可以使用 nginx 中的限流策略进行限流操作。

常见的限流算法:计数器、漏桶算法、令牌桶算法

Java高并发系统限流算法的应用

image

从作用上来说,漏桶和令牌桶算法最明显的区别就是是否允许突发流量(burst)的处理,漏桶算法能够强行限制数据的实时传输(处理)速率,对突发流量不做额外处理;而令牌桶算法能够在限制数据的平均传输速率的同时允许某种程度的突发传输。


2 Nginx 的限流策略

Nginx 的限流主要是两种方式: 限制访问频率和限制并发连接数。

Nginx 按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。


Nginx 官方版本限制 IP 的连接和并发分别有两个模块:

1、limit_req_zone:用来限制单位时间内的请求数,即速率限制 , 采用的漏桶算法 “leaky bucket”。

2、limit_conn_zone:用来限制同一时间连接数,即并发限制。


2.1 limit_req_zone限制访问频率

使用语法:limit_req_zone key zone rate

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 毫秒内又有请求到达,将拒绝处理该请求。


举例:

http {
# 定义限流策略
limit_req_zone $binary_remote_addr zone=rateLimit:10m rate=1r/s ;
# 搜索服务的虚拟主机
server {
location / {
# 使用限流策略,burst=5,重点说明一下这个配置,burst 爆发的意思,这个配置的意思是设置一个大小为 5 的缓冲区(队列)当有大量请求(爆发)过来时,

# 超过了访问频次限制的请求可以先放到这个缓冲区内。nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回 503,如果没有设置,则所

# 有请求会等待排队。
limit_req zone=rateLimit burst=5 nodelay;
proxy_pass http://train-manager-search ;
   }
  }
}

频繁访问:

aba0721e48514ef4960e76a77736171e.png


2.2 limit_conn_zone限制最大连接数

使用语法:limit_conn_zone key zone

key :定义限流对象,binary_remote_addr 是一种 key,表示基于 remote_addr(客户端 IP) 来做限流,binary_ 的目的是压缩内存占用量。

zone:定义共享内存区来存储访问信息, myRateLimit:10m 表示一个大小为 10M,名字为 myRateLimit 的内存区域。1M 能存储 16000 IP 地址的

访问信息,10M 可以存储 16W IP 地址访问信息。

举例:

http {
# 定义限流策略
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 搜索服务的虚拟主机
server {
location / {
# 对应的 key 是 $binary_remote_addr,表示限制单个 IP 同时最多能持有 1 个连接。
limit_conn perip 1;
# 对应的 key 是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。注意,只有当 request header 被
后端 server 处理后,这个连接才进行计数。
limit_conn perserver 10 ;
proxy_pass http://train-manager-search ;
    }
  }
}

3 黑名单设置

有时候会有一些恶意IP攻击服务器,会基于程序频繁发起请求对服务器造成巨大压力,我们此时可以使用Nginx的黑名单功能实现黑名单过滤操作。我们首先需要配置黑名单IP,黑名单IP我们可以记录到一个配置文件中,比如配置到blockip.conf文件中:


配置固定IP为黑名单:

deny 192.168.100.1;

在nginx.conf中引入blockip.conf,可以放到http, server, location语句块,配置如下:

#黑名单
include blockip.conf;

此时在192.168.100.1的IP上访问服务器,会报如下错误:

e683cd2b1575dc65eaa78dc38a8a7eee.png



屏蔽ip的配置文件既可以屏蔽单个ip,也可以屏蔽ip段,或者只允许某个ip或者某个ip段访问。

# 屏蔽单个ip访问
deny IP;
# 允许单个ip访问
allow IP;
# 屏蔽所有ip访问
deny all;
# 允许所有ip访问
allow all;
#屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令
deny 123.0.0.0/8
#屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令
deny 124.45.0.0/16
#屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令
deny 123.45.6.0/24
1234567891011121314

如果你想实现这样的应用,除了几个IP外,其他全部拒绝,那需要你在blockip.conf中这样写:

allow 192.168.100.1;
allow 192.168.100.2;
deny all;
123

但是这种手动配置的方式可能太过繁琐,我们也可以配置动态黑白名单。


配置动态黑白名单,我们可以采用Lua+Redis实现,将黑名单存入到Redis缓存,每次执行请求时,通过lua脚本先获取用户IP,匹配IP是否属于黑名单,如果是,则不让请求,如果不是,则放行。

目录
相关文章
|
2月前
|
算法 NoSQL Java
分布式接口幂等性、分布式限流(Guava 、nginx和lua限流)
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。
|
6月前
|
Java 应用服务中间件 nginx
nginx限流配置理解与学习
nginx限流配置理解与学习
104 0
|
6月前
|
存储 数据采集 算法
Nginx 限流算法大揭秘
Nginx 有多种限流算法....
104 0
Nginx 限流算法大揭秘
|
11月前
|
存储 缓存 算法
|
11月前
|
存储 算法 应用服务中间件
长这么大才读懂高并发核心编程,限流原理与实战,Nginx漏桶限流
使用Nginx可通过配置的方式完成接入层的限流,其ngx_http_limit_req_module模块所提供的limit_req_zone和limit_req两个指令使用漏桶算法进行限流。其中,limit_req_zone指令用于定义一个限流的具体规则(或者计数内存区),limit_req指令应用前者定义的规则完成限流动作。
|
12月前
|
存储 缓存 算法
Nginx 安装配置 | 图床搭建 | Nginx 限流 三大弹
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
209 0
Nginx 安装配置 | 图床搭建 | Nginx 限流 三大弹
|
Web App开发 缓存 网络协议
nginx 限流模块和fail2ban搭配使用
ngnix的限流模块主要有三个: limit_conn 限制某个ip的tcp连接数目或者限制某个server(网站)整体的连接数目 limit_rate 现在每个请求的数据大小 limit_req 限制某个ip的请求次数 其中效果最明显的是第三个limit_req,但是宝塔面板中的流量限制只有前面两项的配置,所以之前一直流量限制没什么用。
306 0
nginx 限流模块和fail2ban搭配使用
|
运维 前端开发 JavaScript
Nginx 限流的天坑!!
Nginx 限流的天坑!!
212 0
Nginx 限流的天坑!!
|
缓存 负载均衡 算法
Nginx应用:配置文件详解、反向代理、负载均衡,做限流、缓存、黑白名单
Nginx应用:配置文件详解、反向代理、负载均衡,做限流、缓存、黑白名单
310 0
Nginx应用:配置文件详解、反向代理、负载均衡,做限流、缓存、黑白名单
|
存储 算法 中间件
nginx限流方案
nginx限流方案
249 0
相关产品
云迁移中心
推荐文章
更多