文档章节

Nginx连接数、请求数限制应用详解

zhiqiangw
 zhiqiangw
发布于 2017/11/02 01:21
字数 932
阅读 992
收藏 0

需求

  1. 秒杀、抢购并发限制、队列缓冲

  2. 下载带宽限制

  3. 防止攻击

nginx连接数限制模块

说明:nginx有很多模块、模块下面又分很多指令,下面就说说limit_conn_zone和limit_conn两指令

1、limit_conn_zone

语法:
Syntax:    limit_conn_zone key zone=name:size;D
efault:    —Context:    http

nginx配置分为三个段:http、server、location,大概格式如下:

http {

    server {

        listen       80;

        server_name  www.tomener.com tomener.com;

        location / {

            root   /var/www/tomener;

            index  index.php index.html index.htm;

            set    $limit_key $binary_remote_addr;

            set    $limit_number 10;

        }
    }
}

nginx配置中可以设置变量,例如上面的$limit_key和$limit_number连个变量,后面是变量的值,好了这些都是对不太了解nginx配置的朋友的一些说明、具体可以搜索一下。

看上面的语法,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/秒
        }
    }
}

分析:
Syntax: limit_conn_zone key zone=name:size;

对于关系:
key => $binary_remote_addr #二进制的IP地址
name => addr #随便取的一个名字,比如,你可以取成abc
size => 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.html2、zone:共享内存空间,作用:保存每个key对应的连接数3、size:共享内存空间大小,如1M、10M、100K

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

limit_conn指令

Syntax:    limit_conn zone number;D

efault:    —Context:    http, server, location

限制每个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_log_level指令

Syntax:    limit_conn_log_level info | notice | warn | error;D

efault:    limit_conn_log_level error;Context:    http, server, location

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

limit_conn_status指令

Syntax:    limit_conn_status code;Default:    limit_conn_status 503;Co

ntext:    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;

    }
}

 

© 著作权归作者所有

zhiqiangw
粉丝 12
博文 193
码字总数 142771
作品 0
郑州
程序员
私信 提问
加载中

评论(0)

zabbix应用实战--Nginx监控详解

一、nginx监控说明: 1、监控指标: 基本活动指标 错误指标 性能指标 2、nginx 处理请求流程(图形): 注释:Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。...

芝麻绿豆
2016/11/14
224
0
在Nginx下针对IP和目录限速

从Nginx配置与应用详解专题的投票结果来看,Nginx已经是目前仅次于APache和MS IIS的Web服务器。Nginx优秀的高并发支持和高效的负载均衡是我们选择它的理由。但有时我们希望它能做的更多。本文...

红薯123
2015/06/29
609
1
Nginx配置详解

Nginx配置文件主要分成四部分: main(全局设置)指令将影响其它所有部分的设置; server(主机设置)指令主要用于指定虚拟主机域名、IP和端口; upstream(上游服务器设置,主要为反向代理、...

到处飘
2017/04/22
0
0
Nginx 配置文件 nginx.conf 详解

原文出处:北京流浪儿 定义Nginx运行的用户和用户组 user www www; nginx进程数,建议设置为等于CPU总核心数。 worker_processes 8; 全局错误日志定义类型,[ debug | info | notice | warn ...

北京流浪儿
2017/07/18
0
0
Nginx配置文件nginx.conf中文详解

#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数。 worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] e...

墨梅
2014/03/27
207
2

没有更多内容

加载失败,请刷新页面

加载更多

laravel 多条件查询 闭包写法

laravel 多条件查询 闭包写法 直接上代码 1: 比如我要查询 符合条件的 部门和 用户 DB::table('user')->where('user_id',20)->whereIn('d_id',[82,83])->get(); 可以使用下面这种方法替换 ......

李佳顺
18分钟前
21
0
springboot实现热部署

一、前言 在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受。在java开发领域...

素小暖OSC
19分钟前
75
0
为什么要选择开源的直播源码开发直播系统?

相信大家在购买直播源码的过程中,肯定都会咨询过是否开源这个问题。对于懂技术的人来说,开源的意思非常好理解,而对于不懂技术的人来说,开源可能是个非常难以理解的词汇。在这里跟大家简单...

图玩智能科技
21分钟前
26
0
真的在Windows中杀死一个进程

偶尔,Windows机器上的程序会发疯,只是挂起。 所以我将调用任务管理器并点击“结束进程”按钮。 但是,这并不总是有效; 如果我尝试了足够多次,那么它通常会最终死亡,但我真的希望能够立即...

技术盛宴
25分钟前
56
0
使用低代码平台 - 危险的赌注

低代码应用平台(LCAP - low code application platforms)在多样、复杂的现代软件开发情势下应运而生。依据Gartner(高德纳,全球最具权威的IT研究与顾问咨询公司)的数据,Mendix 是这方面...

CUBAChinaTeam
26分钟前
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部