Nginx限制连接和请求
一.ngx_http_limit_conn_module
对同一个ip/server的连接数做限制.
配置指令:
limit_conn_zone
语法: limit_conn_zone $variable zone=name:size;
默认值: none
配置段: http
$veriable:常见取值
a.$binary_remote_addr 以客户端ip作为key
b.$server_name 以server作为key
示例:
limit_conn_zone $binary_remote_addr zone=addr:10m;
以客户端的ip地址做key,配置了一个名称为addr的共享内存为10m空间的限制域.如果内存空间被耗尽,则返回503错误.
使用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录
当多个 limit_conn 指令被配置时,所有的连接数限制都会生效
http, server, location段配置:
limit_conn addr ; #同一ip,同一时间,只允许有4个连接
limit_rate 200k;#每个连接的下载速度
二.ngx_http_limit_req_module
对同一个ip的请求数做限制
配置指令:
limit_req_zone
语法: limit_req_zone $variable zone=name:size rate=rate;
默认值: none
配置段: http
示例:
limit_req_zone $binary_remote_addr zone=limit:10m rate=1r/s;
说明:
以客户端ip为key,建立了一个共享内存为10m的limit限制域.每秒可新增1个请求.
http, server, location段配置:
limit_req zone=limit burst=5; //漏桶原理,使用limit限制域限制的速率,每秒1个来处理请求,在处理未完成时,允许有5个请求放在缓存区,其余的请求都要等待.所以单个ip限制的最高峰值为5.
如果不希望这些请求等待,直接返回拒绝结果,加nodelay;则其余请求直接返回默认的503;
limit_req zone=limit burst= nodelay;
如果不加nodelay:
单个ip需要把并发在控制在burst限制内
如果加了nodelay:
单个ip不但需要把并发控制在burst内,而且不超出rate(速率)限制.
三.两者的区别
1.limit_conn是针对连接,即tcp连接,通过三次握手而建立的一个完整状态机制,来建立一个连接。(keep-alive的出现就是为了减少这种握手的次数,是同一连接可以复用.减少开销)
2.limit_req是针对请求,即http请求.
打开一个网页,图文并茂的那种,通常浏览器可能同时建立1-4个连接(依据不同浏览器和传输协议和keep-alive等,实际有所不同),然后由这些连接来发出几十个乃至上百个请求.
浏览器尽管同时能打开多个连接,但limit_conn限制了同时打开的连接个数.如同时只有1个,则其余的都需要等待.
连接打开后,就会尽快处理请求,比如返回文本或图片;limit_req则限制了同一ip在同一时间内请求的速度.比如每秒1个,超过这个速率限制,都会等待或不处理.
如果配置了keep-alive,则一个连接可以处理很多个请求,只要这些请求在limit_req的限制下.
简而言之,如果将web server比作游乐场,limit_conn限制了通道数目,有几条;limit_req限制了每个通道,可以通行速度.
因为limit_conn限制了连接数,同时还可以限制下载速度,一般用作下载方面的限制.
limit_req则一般用作cc攻击防护.
Nginx限制连接和请求的更多相关文章
- 微信内嵌浏览器sessionid丢失问题,nginx ip_hash将所有请求转发到一台机器
现象微信中打开网页,图形验证码填写后,经常提示错误,即使填写正确也会提示错误,并且是间歇性出现. 系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题.近期有部分用户是在微信中访问的,才出 ...
- nginx长连接设置
http { keepalive_timeout 20; --长连接timeout keepalive_requests 8192; --每个连接最大请求数} events { worker_conn ...
- Nginx是如何处理一个请求
首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到 ...
- 从压测碰到的诡异断连问题聊聊Nginx的连接管理
本文主要分享一个在压测Nginx反向代理服务过程中碰到的连接异常断开问题,包括问题的定位与复现,最后由这个实际问题引申聊一下Nginx的连接管理. 本博客已迁移至CatBro's Blog,那是我自己 ...
- Nginx+Lua+Redis 对请求进行限制
Nginx+Lua+Redis 对请求进行限制 一.概述 需求:所有访问/myapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器 ...
- nginx源代码分析--读请求主体(1)
首先,读取请求体已进入HTTP要求11相,我们需要做的请求正文部分处理一些模块,所以这个模块需要注册功能在这个阶段,在阅读功能要求的身体ngx_http_read_client_request_bod ...
- 记一次nginx强制将https请求重定向http
公司要做小程序,但是发现小程序只允许https请求 所以查了查资料使用nginx重定向请求得方式做 以下是过程: 阿里云ssl证书管理控制台申请ssl证书 下载nginx 证书: 解压后得到后缀为ke ...
- nginx反向代理导致请求header头信息丢失
背景:前端与后端调试接口,后端拿不到前段发过去的请求头信息,导致接口不通.(但是在本地是可以拿到的) 原因:nginx做了反向代理,没有请求时候加头信息的配置 报错如下: 解决方法: 方法一:NGIN ...
- Nginx 流量带宽等请求状态统计( ngx_req_status)
Nginx 流量带宽等请求状态统计 ( ngx_req_status) 插件下载地址: wget http://nginx.org/download/nginx-1.4.2.tar.gz git c ...
随机推荐
- AtCoder Grand Contest 018 A
A - Getting Difference Time limit時間制限 : 2sec / Memory limitメモリ制限 : 256MB 配点 : 300 点 問題文 箱に N 個のボールが入 ...
- 有关BOM(Browser Object Model)的内容
包括: BOM概述 BOM模型 Window对象(常用属性和方法,窗口的打开,窗口的关闭,模态对话框,定时器) Navigator对象(遍历navigator对象的所有属性,Navigator 对象集 ...
- dnspod 批量添加记录
#!/usr/bin/python #-*- coding: utf-8 -*- import os,requests,json import re,xlsxwriter,time import xl ...
- zabbix ssh登录ip监控,登录ip归属地查询
#!/usr/local/zabbix/scripts/src/bin/python # -*- coding: UTF-8 -*- from bs4 import BeautifulSoup as ...
- 引进js文件运行在浏览器上调试报文件找不到
原因是jsp文件的路径和js文件不在同一目录下,用"../"将它们的路径配置在同一路径下或者在路径前面加上"<%= request.getContextPath() ...
- -webkit-box-flex: 1;属性和 float 属性冲突造成元素看不见的BUG
今天切图的时候发现了这个问题,样式是这样的: .check-btns-box .check-btn{float: left;-webkit-box-flex: 1;-moz-box-flex: 1;- ...
- asp.net如何更改默认的登陆帐号/密码:16aspx/16aspx
修改数据库,在DB_16aspx文件夹下面 sql server 2005+的数据库打开.
- POJ 2886.Who Gets the Most Candies? -线段树(单点更新、类约瑟夫问题)
线段树可真有意思呢续集2... 区间成段的替换和增减,以及区间求和等,其中夹杂着一些神奇的操作,数据离散化,简单hash,区间异或,还需要带着脑子来写题. 有的题目对数据的操作并不是直接按照题面意思进 ...
- (20)C#泛型
泛型的定义:通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程时一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用. 优点: 1.省去了拆箱.装箱 2.提高安全性 3. ...
- NEUQOJ 1999: 三角形or四边形?【搜索联通块/模拟】
http://newoj.acmclub.cn/problems/1999 1999: 三角形or四边形? 描述 题目描述: JiangYu很无聊,所以他拿钉子在板子上戳出了一个由.#组成的10*10 ...