LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用详解

admin
2025年8月20日 12:56 本文热度 89
Nginx请求限制模块ngx_http_limit_req_module、流量限制模块ngx_stream_limit_conn_module基于令牌桶算法,可以通过limit_conn_zone 和limit_req_zone这两个组件来对客户端访问目录和文件的访问频率和次数进行限制。可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制。如能善用此模块能够对 cc、ddos等此类的×××进行有效的防御。

对于提供下载的网站,肯定是要进行流量控制的,例如软件下载站、视频服务等。它也可以减少一些爬虫程序或者DDOS的×××。

案例

http

{

limit_conn_zone $binary_remote_addr zone=perip:20m;

limit_req_zone  $binary_remote_addr zone=req_one:20m rate=12r/s;

limit_conn   one  10;

limit_req   zone=req_one burst=120;

server  {

        listen          80;

        server_name     xxx.xxx.com ;

        location / {

            root   /var/www/tomener;

            limit_conn addr 5; #是限制每个IP只能发起5个连接

            limit_rate 100k; #限速为 100KB/秒

}

}

}

nginx连接数限制模块

1、limit_conn指令

语法:      limit_conn zone number;

默认值:    —

使用字段:  http, server, location

指定一个zone的每个key最大连接数

限制每个name对应客服端的连接数,比如上面的limit_conn addr 5;意思就是现在addr这个name对应的客服端的连接数,比如name对应的是45.168.68.202这个ip地址,那么这个ip最多有5个并发连接,那什么并发呢?像这样的连接,请求到达并已经读取了请求头信息到响应头信息发送完毕,在这个过程中的连接,当一个客服端的并发连接达到我们设置的5个以上时,会返回503 (Service Temporarily Unavailable) 错误

这里,小伙伴对这个zone估计还是有一些疑问,有疑问可以在下面评论,大家一起讨论,比如,有人可能会问,一个客服端占用5个,那么327680只能容纳65536个客服端,那么第65537个客服端就会返回503错误。

limit_conn_zone

语法:

Syntax:     limit_conn_zone key zone=name:size;

Default:     —

Context:     http

看上面的语法,limit_conn_zone只能用在http段,例如:

http {

    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {

        listen       80;

        server_name  www.tomener.com tomener.com;

        location / {

            root   /var/www/tomener;

            index  index.php index.html index.htm;

            limit_conn addr 5; #是限制每个IP只能发起5个连接

            limit_rate 100k; #限速为 100KB/秒

        }

    }

}

对于关系:key    => $binary_remote_addr #二进制的IP地址name => addr #随便取的一个名字,比如,你可以取成abcsize    => 10m #空间大小,这里是10兆一个二进制的ip地址在32位机器上占用32个字节,在64位机器上占用63个字节,那么10M可以存放多少呢,计算一下,10x1024x1024/32 = 327680,意思就是可以存放326780个ip地址(32位),64位可以存放163840个ip

1、key:键,可以说是一个规则,就是对客户端连接的一个标识,比如上面用的是IP地址,比如我们可以用$query_string,例如:/index.php?mp=138944093953,那我们就可以根据mp的值来限制连接数,更多的nginx内置变量请查看http://nginx.org/en/docs/varindex.html

2、zone:共享内存空间,作用:保存每个key对应的连接数

3、size:共享内存空间大小,如1M、10M、100K

当共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误

limit_conn_log_level指令

Syntax:      limit_conn_log_level info | notice | warn | error;

Default:     limit_conn_log_level error;

Context:     http, server, location

说明:当达到最大限制连接数后,记录日志的等级。

limit_conn_status指令

Syntax:     limit_conn_status code;

Default:     limit_conn_status 503;

Context:     http, server, location

说明:当超过限制后,返回的响应状态码,默认是503,现在你就知道上面为什么会返回503(Service Temporarily Unavailable)服务暂时不可用

例子:

1、同时限制ip和虚拟主机最大并发连接

http {

    limit_conn_zone $binary_remote_addr zone=perip:10m;

    limit_conn_zone $server_name zone=perserver:10m;

    server {

        location / {

            limit_conn perip 10;

            limit_conn perserver 1000;

        }

    }

}

2、根据请求参数来限制

#请求:http://www.tomener.com/item.html?mp=1967464354&id=43566929485

limit_conn_zone $mp_limit_key zone=mp:10m;



server {



    set $mp_limit_key $binary_remote_addr; #key设置默认值

    if ( $query_string ~ .*mp=(\d+).* ) {

        set $mp_limit_key $1;

    }

    location / {

        limit_conn mp 10;

    }

}

ngx_http_limit_req_module

limit_req_zone

Syntax:     limit_req_zone key zone=name:size rate=rate;

Default:     —

Context:     http

ngx_http_limit_req_module模块的使用和ngx_http_limit_conn_module模块差不多,这里暂时不在讲述,可查看官方文档:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html


该文章在 2025/8/20 13:01:28 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved