nginx限制最大连接数

nginx限制连接数ngx_http_limit_conn_module模块

  • A+

所属分类:Nginx

 

一. 前言

我们经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,并发数进行限制。下面说说ngx_http_limit_conn_module 模块来实现该需求。该模块可以根据定义的键来限制每个键值的连接数,如同一个IP来源的连接数。并不是所有的连接都会被该模块计数,只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。

二. ngx_http_limit_conn_module指令解释

limit_conn_zone
语法: limit_conn_zone $variable zone=name:size;
默认值: none
配置段: http
该指令描述会话状态存储区域。键的状态中保存了当前连接数,键的值可以是特定变量的任何非空值(空值将不会被考虑)。$variable定义键,zone=name定义区域名称,后面的limit_conn指令会用到的。size定义各个键共享内存空间大小。如:

 

1

limit_conn_zone $binary_remote_addr zone=addr:10m;

注释:客户端的IP地址作为键。注意,这里使用的是$binary_remote_addr变量,而不是$remote_addr变量。
$remote_addr变量的长度为7字节到15字节,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
$binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。
limit_zone 指令和limit_conn_zone指令同等意思,已经被弃用,就不再做说明了。

limit_conn_log_level
语法:limit_conn_log_level info | notice | warn | error
默认值:error
配置段:http, server, location
当达到最大限制连接数后,记录日志的等级。

limit_conn
语法:limit_conn zone_name number
默认值:none
配置段:http, server, location
指定每个给定键值的最大同时连接数,当超过这个数字时被返回503 (Service Temporarily Unavailable)错误。如:

 

1

2

3

4

5

6

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {

    location /www.ttlsa.com/ {

        limit_conn addr 1;

    }

}

同一IP同一时间只允许有一个连接。
当多个 limit_conn 指令被配置时,所有的连接数限制都会生效。比如,下面配置不仅会限制单一IP来源的连接数,同时也会限制单一虚拟服务器的总连接数:

 

1

2

3

4

5

6

limit_conn_zone $binary_remote_addr zone=perip:10m;

limit_conn_zone $server_name zone=perserver:10m;

server {

    limit_conn perip 10;

    limit_conn perserver 100;

}

[warning]limit_conn指令可以从上级继承下来。[/warning]

limit_conn_status
语法: limit_conn_status code;
默认值: limit_conn_status 503;
配置段: http, server, location
该指定在1.3.15版本引入的。指定当超过限制时,返回的状态码。默认是503。

limit_rate
语法:limit_rate rate
默认值:0
配置段:http, server, location, if in location
对每个连接的速率限制。参数rate的单位是字节/秒,设置为0将关闭限速。 按连接限速而不是按IP限制,因此如果某个客户端同时开启了两个连接,那么客户端的整体速率是这条指令设置值的2倍。

三. 完整实例配置

 

 

1

2

3

4

5

6

7

8

9

10

11

12

http {

limit_conn_zone $binary_remote_addr zone=limit:10m;

limit_conn_log_level info;

 

server {

location  ^~ /download/ {  

limit_conn limit 4;

limit_rate 200k;

alias /data/www.ttlsa.com/download/;

                }

}

}

 

四. 使用注意事项

事务都具有两面性的。ngx_http_limit_conn_module 模块虽说可以解决当前面临的并发问题,但是会引入另外一些问题的。如前端如果有做LVS或反代,而我们后端启用了该模块功能,那不是非常多503错误了?这样的话,可以在前端启用该模块,要么就是设置白名单,白名单设置参见后续的文档,我会整理一份以供读者参考。
可以与ngx_http_limit_req_module 模块结合起来使用,以达到最好效果。《nginx限制请求数ngx_http_limit_req_module模块》。

 

 

 

 

 

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {

limit_conn perip 10;
limit_conn perserver 100;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx服务器中,可以通过配置limit_conn模块来限制最大连接数。[2] 这个模块可以控制并发连接数量,以防止服务器过载。在配置文件中,可以使用limit_conn_zone指令来定义一个共享内存区域,然后使用limit_conn指令来指定最大连接数。通过这种方式,可以保证服务器不会超过设定的连接限制。 另外,在Nginx服务器中,可以通过配置limit_req模块来限制请求的速率。 这个模块可以控制每个IP地址或每个请求的访问频率,以防止恶意请求或过度的负载。在配置文件中,可以使用limit_req_zone指令来定义一个共享内存区域,然后使用limit_req指令来指定请求的速率限制。通过这种方式,可以保证服务器在高负载情况下仍能正常工作。 需要注意的是,具体的最大连接数取决于服务器的硬件配置和性能。通常情况下,使用阿里云ecs c6规格族服务器可以提供足够的性能支持大量的并发连接。 但是,如果需要更高的连接数或更高的性能,可以根据需求升级服务器或增加后端服务器的数量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [nginx支持的最大长连接数,试验告诉你](https://blog.csdn.net/weixin_47402482/article/details/127606317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Nginx服务器中限制连接数与限制请求的模块配置教程](https://download.csdn.net/download/weixin_38713801/12902361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [查看nginx的最大连接数及当前最大连接数](https://blog.csdn.net/newxwj/article/details/107018245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值