`
wb284551926
  • 浏览: 551565 次
文章分类
社区版块
存档分类
最新评论

nginx对ip限流的操作(转载)

阅读更多

一.背景

  我们经常遇到这种情况,客户使用生产环境进行了压力测试,大量的请求,导致其他客户的请求未能响应。

  服务器资源有限,但是客户端来的请求在不断的上涨, 为了保证一部分的请求能够正常相应, 不得不放弃一些客户端来的请求, 这个时候我们会选择行的进行一些NGINX的限流操作, 这种操作可以很大程度上缓解服务器的压力, 使其他正常的请求能够得到正常响应.

 

二.使用nginx模块

 

  •   1. ngx_http_limit_conn_module模块

 

     说明:此模块用来限制单IP的连接数

     配置方式:

     1.在nginx配置文件中的http配置模块添加: limit_conn_zone key zone=name:size;

         说明:开辟一个内存空间,为不同的key值保存状态,状态属性里面有当前来的连接数。key可以为变量,这里的key为$binary_remote_addr,即远程服务器的地址。name为该空间的命名,size为大小。

         PS:  64位系统上,$binary_remote_addr存储占用64 bytes内存空间,状态存储占用64bytes内存空间,1M的size能存8192个不同$binary_remote_addr的状态。

      2. 再在http->server->location配置模块中添加:limit_conn zone number;

          说明:在当前location下,命名为zonekey值对应的连接数不能超过number,如果超过了,就会返回503错误

     配置实例:

 

	http {
	# 定义一个key为$binary_remote_addr、名字为addr、空间大小为10M的limit_conn_zone
	limit_conn_zone $binary_remote_addr zone=addr:10m;
 
   	 ...
 		
   	 server {
 
        ...
 
        location /download/ {
            # 定义当前location下$binary_remote_addr对应的连接数不能超过1
            limit_conn addr 1;
        }
   	  }

  }

 

 

 

 

  •  ngx_http_limit_req_module模块

 

     说明:此模块用来限制单IP的请求频率

     配置方式:

     1.在nginx配置文件中的http配置模块添加: limit_req_zone key zone=name:size rate[rate];

         说明:开辟一个内存空间,为不同的key值保存状态,状态属性里面有当前来的次数数。key可以为变量,这里的key为$binary_remote_addr,即远程服务器的地址。name为该空间的命名,size为大小,rate为限制的频率。

         PS:  64位系统上,$binary_remote_addr存储占用64 bytes内存空间,状态存储占用64bytes内存空间,1M的size能存8192个不同$binary_remote_addr的状态。

      2. 再在http->server->location配置模块中添加:limit_req_zone=name [brust=number] [nodelay];

          说明:当前location受zone名为name的limit_req_zone限制,burst为可配参数,该配置可以理解为允许速率超过正常的请求个数(实际上比这个复杂的多),数量为number个,如果超过了,可配参数nodelay配置了就会返回503错误,没有配置超过的请求就会排队等待。

      配置示例:

 

	http {
	# 定义一个key为$binary_remote_addr、名字为one、空间大小为10M、速度限制为1次每秒的limit_req_zone
	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
 
   	 ...
 
    	server {
 
        ...
 
        location /search/ {
            # 定义当前location请求受名为one的limit_req_zone限制,令牌数为5,请求溢出后直接报错
            limit_req zone=one burst=5 nodelay;
        }
	    }
	}

    

 

  附录:

     可能存在有些IP我们是不想被限制的,则可利用nginx_http_geo_module 和 ngx_http_map_module模块

     具体参考:http://nginx.org/en/docs/http/ngx_http_geo_module.html

                   http://nginx.org/en/docs/http/ngx_http_map_module.html

 

   具体配置示例:

      

  http {

 

    # 定义名为$whiteiplist的geo,会根据client IP 映射成不同的值,默认值为1,白名单ip的值为0 

geo $whiteiplist  {

default 1;    #IP默认映射为1,根据geo的优先级,优先匹配完整IP。

192.168.1.10 0;  #将192,168.10.0映射为0

192.168.1.11 0;

}

 

        # 定义名为$limit变量,$limit变量的值是由$whiteiplist的值决定的,当$whiteiplist为1时,$limit的值为$binary_remote_addr;当$whiteiplist为0时,$limit的值为空

 

map $whiteiplist $limit {

     1 $binary_remote_addr;

     0 "" ;

}

 

	# 定义一个key为$limit、名字为one、空间大小为10M、速度限制为1次每秒的limit_req_zone
	limit_req_zone $limit zone=one:10m rate=1r/s;

 

……

 

    server {
 
        ...

   

		location /search/ {
            # 定义当前location请求受名为one的limit_req_zone限制,令牌数为5,请求溢出后直接报错
            limit_req zone=one burst=5 nodelay;
        }

}

         }

 

PS:特别要感谢我们公司的无忌大哥,出自他手,我只是一个过客。

 

 

原文地址:https://blog.csdn.net/qq_29069885/article/details/73301850

分享到:
评论

相关推荐

    nginx 限制ip、并发量、连接数等配置

    在运维过程中,为了保障服务器稳定性和安全性,通常需要对访问进行一定的限制,包括限制特定IP、控制并发连接数以及设定连接数上限。本文将详细介绍如何在Nginx配置中实现这些功能。 一、限制特定IP访问 在Nginx...

    nginx限流.xmind

    nginx限流

    分布式限流面试专题系列:Nginx+zookeeper.zip

    8. **面试准备**:对于面试者来说,了解Nginx的配置语法、限流插件的使用以及Zookeeper的基本操作至关重要。同时,需要理解分布式限流的挑战,如一致性、可扩展性和容错性,并能阐述如何利用Nginx和Zookeeper解决...

    Nginx:Nginx限流与防盗链设置.docx

    Nginx:Nginx限流与防盗链设置.docx

    nginx限流配置.docx

    Nginx 限流配置是指通过 Nginx 服务器对用户的访问进行限制,以避免服务器受到攻击或过载。这种配置可以防止恶意用户对服务器的攻击,保护服务器的安全和性能。 限流配置 在 Nginx 配置文件中,我们可以使用 `...

    nginx ip 过滤访问限制

    python脚本 从nginx的访问log,获取访问IP,记录到redis,根据IP访问数量判断是否存在安全问题,记录不正常IP,(写入到防火墙过滤-待完成)

    Nginx对网段内ip的连接数限流配置详解

    在处理网络流量和服务器负载方面,Nginx提供了丰富的模块来实现各种功能,其中之一就是限流模块。 限流是一种避免服务器资源被过度消耗的手段,它可以防止过多的客户端连接或请求对服务器造成过大压力,从而保证...

    web服务器如何限流-nginx,tomcat服务器如何限制流量

    本文将深入探讨如何在Nginx和Tomcat这两个常见的Web服务器上实现限流。 首先,我们关注Nginx。Nginx以其高效的反向代理和负载均衡能力而闻名,同时也提供了内置的限流模块。通过修改`nginx.conf`配置文件,我们可以...

    分布式限流面试专题系列:Nginx+zookeeper.rar

    此外,还可以通过`zone`定义共享内存区,存储每个IP地址的请求计数,实现IP级别的限流。Nginx还支持突发流量控制,如`burst`参数,允许短时间内超出限制的请求短暂堆积。 Zookeeper是一个分布式协调服务,它在...

    nginx实现按国家/地域封禁和按ip频率限流能力

    centos下nginx实现按国家/地域封禁、按ip频率限流能力、ngx_http_geoip2_module、ngx_http_geoip_module的区分,docker部署,基于最新版1.21 nginx。ngx_http_geoip2_module 支持指定字段来进行ip解析,而ngx_...

    nginx限制IP恶意调用短信接口处理方法

    在处理Nginx限制IP恶意调用短信接口的问题时,通常采用的处理方法有两种:一是使用Nginx黑名单方式,二是限制IP请求数。接下来,我们将详细探讨这两种处理方法。 ### Nginx黑名单方式 #### 实现原理 使用Nginx黑...

    Nginx+RTMP 推拉流集群方案

    Nginx+RTMP推拉流集群方案是一种流行的视频直播技术架构,它通过结合Nginx Web服务器和RTMP(Real Time Messaging Protocol)流媒体传输协议来实现网络视频直播的推送和接收功能。RTMP协议由Adobe公司开发,主要用于...

    Nginx单IP地址配置多个SSL证书的方法示例

    为了解决这个问题,我们可以利用TLS Server Name Indication (SNI) 扩展,使得Nginx在一个IP地址上能够支持多个SSL证书。 首先,我们需要确保Nginx服务器已经支持SNI功能。可以通过运行`nginx -V`命令来查看Nginx的...

    自动reload nginx解决nginx对动态域名不重新解析的Shell脚本

    3. **更新Nginx配置**:如果IP有变化,但这里我们不实际修改Nginx配置文件,而是直接触发Nginx的`reload`操作,让Nginx重新解析DNS。 4. **执行nginx -s reload**:执行`nginx -s reload`命令,这个命令会告诉Nginx...

    nginx跨域问题,解决多端口,多ip问题

    代码逻辑优化是指对 Nginx 配置的优化,以提高服务器性能和安全性。其中包括前端配置、后端配置和服务器配置三个方面。 前端配置:在前端配置中,需要添加*" />,以允许跨域访问。 后端配置:在后端配置中,需要...

    Nginx作为反向代理时传递客户端IP的设置方法

    nginx默认配置文件里面是没有进行日志转发配置的,这个需要我们自己手动来操作了,当然后端的real server不同时操作方法是不一样的,这里我们分别例举几种情况来说明一下。 nginx做前端,转发日志到后端nginx服务器...

    Nginx教程 防御ddos,用户访问控制,限流.zip

    **Nginx 教程:防御DDoS、用户访问控制与限流** Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于Web服务领域,以其高效、稳定和灵活的配置而闻名。本教程将围绕如何利用Nginx进行DDoS防御、用户访问控制以及...

    CentOS7.3下Nginx基于IP+端口的虚拟主机配置实战.pdf

    在本教程中,我们将详细介绍如何在CentOS 7.3系统下配置基于IP和端口的Nginx虚拟主机。首先,了解Nginx的基本概念是必要的。Nginx(发音为“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/...

Global site tag (gtag.js) - Google Analytics