nginx 访问控制之 限速
nginx限速可以通过 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块来实现限速的功能。
一、ngx_http_limit_conn_module :
该模块主要限制下载速度。
1、并发连接限制:
http
{
...
limit_conn_zone $binary_remote_addr zone=aming:10m;
...
server
{
...
limit_conn aming ;
...
}
}
说明:首先用limit_conn_zone定义了一个内存区块索引aming,大小为10m,它以$binary_remote_addr作为key。
该配置只能在http里面配置,不支持在server里配置。 limit_conn 定义针对aming这个zone,并发连接为10个。在这需要注意一下,这个10指的是单个IP的并发最多为10个。
2、速度限制:
location ~ /download/ {
...
limit_rate_after 512k;
limit_rate 150k;
...
}
说明:limit_rate_after定义当一个文件下载到指定大小(本例中为512k)之后开始限速;
limit_rate 定义下载速度为150k/s。
注意:这两个参数针对每个请求限速。
二、ngx_http_limit_req_module:
该模块主要用来限制请求数。
1、limit_req_zone:
语法: limit_req_zone $variable zone=name:size rate=rate;
默认值: none
配置段: http 设置一块共享内存限制域用来保存键值的状态参数。 特别是保存了当前超出请求的数量。
键的值就是指定的变量(空值不会被计算)。
如limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 说明:区域名称为one,大小为10m,平均处理的请求频率不能超过每秒一次,键值是客户端IP。
使用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。
如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 (Service Temporarily Unavailable)错误。
速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,
所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。
2、limit_req
语法: limit_req zone=name [burst=number] [nodelay];
默认值: —
配置段: http, server, location 设置对应的共享内存限制域和允许被处理的最大请求数阈值。
如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以所有的请求都是以定义的频率被处理的。
超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,
这时,这个请求会被终止,并返回503 (Service Temporarily Unavailable) 错误。 这个阈值的默认值为0。如:
limit_req_zone $binary_remote_addr zone=aming:10m rate=1r/s;
server {
location /upload/ {
limit_req zone=aming burst=;
}
} 限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个。 如果不希望超过的请求被延迟,可以用nodelay参数,如: limit_req zone=aming burst= nodelay;
示例:
http {
limit_req_zone $binary_remote_addr zone=aming:10m rate=1r/s;
server {
location ^~ /download/ {
limit_req zone=aming burst=;
}
}
}
设置白名单:
如果是针对公司内部IP或者lo(127.0.0.1)不进行限速,如何做呢?这就要用到geo模块了。 假如,预把127.0.0.1和192.168.100./24网段设置为白名单,需要这样做。
在http { }里面增加:
geo $limited {
default ;
127.0.0.1/ ;
192.168.100.0/ ;
} map $limited $limit {
$binary_remote_addr;
"";
} 原来的 “limit_req_zone $binary_remote_addr ” 改为“limit_req_zone $limit” 完整示例: http {
geo $limited {
default ;
127.0.0.1/ ;
192.168.100.0/ ;
} map $limited $limit {
$binary_remote_addr;
"";
} limit_req_zone $limit zone=aming:10m rate=1r/s; server {
location ^~ /download/ {
limit_req zone=aming burst=;
}
}
}
nginx 访问控制之 限速的更多相关文章
- 006.Nginx访问控制
一 Nginx连接限制 1.1 HTTP协议的连接与请求 HTTP是建立在TCP, 一次HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上再进行HTTP请求. HTTP请求建立在一 ...
- nginx做下载限速
nginx做下载限速-szszszsz-ChinaUnix博客 nginx做下载限速 2009-12-25 14:34:57 分类: 系统运维 nginx做下载服务器,在性能上满足需求.自带limit ...
- nginx防盗链、nginx访问控制、nginx解析php相关配制、nginx代理
1.nginx防盗链编辑:vim /usr/local/nginx/conf/vhost/test.com.conf写入: location ~* ^.+\.(gif|jpg|png|swf|flv| ...
- Linux centos VMware Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理
一.Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x ...
- nginx对网站限速
注意:nginx 1.1.8 之后的版本的语法改为limit_conn_zone $binary_remote_addr zone=NAME:10m; NAME 就是 zone 的名字限制连接数:要限 ...
- Nginx访问控制
1.访问控制 涉及模块:ngx_http_access_module 模块概述:允许限制某些 IP 地址的客户端访问. 对应指令: allow 语法: allow address | CIDR | u ...
- 一个nginx 回源限速的bug处理过程记录
一个生产环境,nginx占用cpu很高. top - :: up day, :, users, load average: 13.26, 13.20, 13.20 Tasks: total, runn ...
- nginx limit_rate突然限速失败
##问题 nginx限制用户对指定目录的访问: <!-- lang: shell --> location ~ ^/(path001)/ { limit_rate 0k; limit_co ...
- Nginx访问控制_登陆权限的控制(http_auth_basic_module)
Nginx提供HTTP的Basic Auth功能,配置了Basic Auth之后,需要输入正确的用户名和密码之后才能正确的访问网站. 我们使用htpasswd来生成密码信息,首先要安装httpd-to ...
随机推荐
- Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析
Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...
- Matlab中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.想象一个乱糟糟的开发小组的工 ...
- js设置全局变量与读取全局变量
方法1: 设置: var a = 1; 读取: a window.a window['a'] 方法2: 设置: window.b=2; 读取: b window.b window['b'] 方法3: ...
- CSS 精灵技术(sprite)
一.精灵技术产生的背景 图所示为网页的请求原理图,当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户. 然而,一个网页中往往会应用很多小的背景图像作为修饰,当 ...
- php bootstrap-datetimepicker
开发语言:php 框架:thinkphp 3.2 问题:搜索条件 开始时间--结束时间 解决工具: bootstrap-datetimepicker 插件 时间插件组合用法 1.公用部分 css: b ...
- 第一册: lesson 129。
原文: Seventy miles an hour. question: What does Ann advise her husband to do next time? Look,Gary! Th ...
- H3C 无线交换机的数据转发原理
- Odoo中的五种Action详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826232.html Odoo中的五种action都是继承自ir.actions.actions模型实现的 ...
- backtrace() returns only one stack frame
参考: 在Linux中如何利用backtrace信息解决程序崩溃的问题 linux 打印堆栈方法 https://devtalk.nvidia.com/default/topic/987279/jet ...
- centos下导入mysql数据库
先进入mysql1.mysql -u root -p2.输入密码3.use 要导入的数据库名(没有就新建一个,使用create database test;命令新建,再use test;,再set n ...