服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - Nginx限流和黑名单配置的策略

Nginx限流和黑名单配置的策略

2022-08-09 10:17赵广陆 Nginx

这篇文章主要介绍了Nginx限流和黑名单配置,Nginx的限流主要是两种方式,限制访问频率和限制并发连接数,Nginx 按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值,感兴趣的朋友跟随小

1 背景介绍

为了防止一些抢票助手所发起的一些无用请求,我们可以使用 nginx 中的限流策略进行限流操作。
常见的限流算法:计数器、漏桶算法、令牌桶算法

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

Nginx限流和黑名单配置的策略

从作用上来说,漏桶和令牌桶算法最明显的区别就是是否允许突发流量(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 毫秒内又有请求到达,将拒绝处理该请求。

举例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 ;
   }
  }
}

频繁访问:

Nginx限流和黑名单配置的策略

 

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 地址访问信息。
举例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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为黑名单:

?
1
deny 192.168.100.1;

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

?
1
2
#黑名单
include blockip.conf;

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

Nginx限流和黑名单配置的策略

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 屏蔽单个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中这样写:

?
1
2
3
4
allow 192.168.100.1;
allow 192.168.100.2;
deny all;
123

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

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

到此这篇关于Nginx限流和黑名单配置的文章就介绍到这了,更多相关nginx限流配置内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/ZGL_cyy/article/details/124817960

延伸 · 阅读

精彩推荐
  • NginxNginx + consul + upsync 完成动态负载均衡的方法详解

    Nginx + consul + upsync 完成动态负载均衡的方法详解

    这篇文章主要介绍了Nginx + consul + upsync 完成动态负载均衡,需要的朋友可以参考下...

    暮色月下13422020-12-26
  • NginxNginx服务器中配置404错误页面时一些值得注意的地方

    Nginx服务器中配置404错误页面时一些值得注意的地方

    这篇文章主要介绍了Nginx服务器中配置404错误页面时一些值得注意的地方,包括隐藏Nginx出错页面及Header上的版本号的安全方法,需要的朋友可以参考下 ...

    姜南4982019-11-06
  • Nginx详解nginx实现https网站设置

    详解nginx实现https网站设置

    这篇文章主要介绍了详解nginx实现https网站设置,详细的介绍了HTTPS简介和证书生成等,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随...

    静小妞3632019-12-20
  • NginxNginx 反向代理与负载均衡详解

    Nginx 反向代理与负载均衡详解

    Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在Nginx 配置详解中有说明,这篇就开门见山,先描述一些关于代理功能的...

    今日头条2602019-11-10
  • NginxNginx多个前端服务配置方式详解

    Nginx多个前端服务配置方式详解

    这篇文章主要介绍了Nginx多个前端服务配置方式,主要包括多个location配置,多个server配置,配置方式本文给大家介绍的非常详细,感兴趣的朋友一起看看吧...

    哈啊哈铪9292022-08-03
  • NginxNginx启用gzip压缩的方法示例

    Nginx启用gzip压缩的方法示例

    这篇文章主要介绍了Nginx启用gzip压缩的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    标点符3762019-12-24
  • NginxHipChat上传文件报未知错误的原因分析及解决方案

    HipChat上传文件报未知错误的原因分析及解决方案

    HipChat的功能类似于Campfire、Sazneo等在线协同工具,并且和Yammer以及Salesforce的Chatter等企业社交平台有一定相似之处。你可以为单个项目或者小组搭建自有的...

    mrr2732019-11-08
  • NginxNginx的安装和多域名配置的实现方法

    Nginx的安装和多域名配置的实现方法

    这篇文章主要介绍了Nginx的安装和多域名配置的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    张小凡vip5032019-12-27