nginx 限制并发连接数/流量用法

limit_conn

语法:limit_conn zone_name the_size
作用域:http, server, location

 代码如下 复制代码

limit_zone   one  $binary_remote_addr  10m;
server {
location /download/ {
limit_conn   one  1;
}

定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。限制 /download/ 目录下,一个会话只能进行一个连接。简单点,就是限制 /download/ 目录下,一个IP只能发起一个连接,多过一个,一律503。

Nginx限制流量/限制带宽?

nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个组件来对目录进行限速。

 代码如下 复制代码

http {
limit_zone   one  $binary_remote_addr  10m;
server {
location /download/ {
limit_conn  ctohome_zone 2;

limit_rate 300k;
}
}
}

limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。

limit_conn ctohome_zone 2;

限制每个IP只能发起2个并发连接。

limit_rate 300k;

对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。

ngx_http_limit_conn_module

ngx_http_limit_conn_module 模块可以按照定义的键限定每个键值的连接数。特别的,可以设定单一 IP 来源的连接数。

并不是所有的连接都会被模块计数;只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。

配置范例

 代码如下 复制代码

http {
limit_conn_zone $binary_remote_addr zone=addr:10m;

...

server {

...

location /download/ {
limit_conn addr 1;
}

指令

语法: limit_conn zone number;
默认值: —
上下文: http, server, location
指定一块已经设定的共享内存空间,以及每个给定键值的最大连接数。当连接数超过最大连接数时,服务器将会返回 503 (Service Temporarily Unavailable) 错误。比如,如下配置

 代码如下 复制代码

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
location /download/ {
limit_conn addr 1;
}

表示,同一 IP 同一时间只允许有一个连接。

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

 代码如下 复制代码

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;
}

如果当前配置层级没有limit_conn指令,将会从更高层级继承连接限制配置。

语法: limit_conn_log_level info | notice | warn | error;
默认值:
limit_conn_log_level error;
上下文: http, server, location
这个指令出现在版本 0.8.18.
指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级。

语法: limit_conn_zone $variable zone=name:size;
默认值: —
上下文: http
设定保存各个键的状态的共享内存空间的参数。键的状态中保存了当前连接数。键的值可以是特定变量的任何非空值(空值将不会被考虑)。 使用范例:

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字节。一兆字节的共享内存空间可以保存3.2万个32位的状态,1.6万个64位的状态。如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。

语法: limit_zone name $variable size;

默认值: —
上下文: http
这条指令在 1.1.8 版本中已经被废弃,应该使用等效的limit_conn_zone指令。该指令的语法也有变化:

limit_conn_zone $variable zone=name:size;

时间: 2024-10-18 11:19:49

nginx 限制并发连接数/流量用法的相关文章

nginx 防垃圾流量的perl清洗脚本

1.根据nginx的访问日志,根据匹配规则查出来源域名,按照来源域名的在一定时间内的访问量来确定屏蔽对象 将下面的脚本放入到系统定时任务中,定时(2-5分钟,可根据具体情况做相应调整)执行. 确定一个判断不正常的流量的数量,凡是大于该数量的来源一律清洗. 当然这里有可能会有误判,所以在后面将正常的来源地址过滤掉. cat purge_traffic.sh #!/bin/bash if [ -f /var/log/nginx/www-access.log ]; then tail -10000 /

Nginx配置统计流量带宽请求及记录实时请求状态的方法_nginx

流量带宽请求状态统计ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求.以及各url域名所消耗的带宽是多少.ngx_req_status提供了这些功能. 功能特性 按域名.url.ip等等统计信息 统计总流量 统计当前带宽\峰值带宽 统计总请求数量1. 安装 # cd /usr/local/src/ # wget "http://nginx.org/download/nginx-1

nginx if判断&&和||用法详解

今天在写nginx配置的时候需要用到if判断的&&,但是查了一下文档if并不支持&&的写法,现在报方法记录一下   ①nginx if判断&&(并且)写法  set $allowphp ''; if ($request_method ~ ^(POST)$) {      set $allowphp p; } if ( $request_filename !~ \.php$) {     set $allowphp "${allowphp}c&quo

nginx中ngx_http_limit_req_module 模块用法

ngx_http_limit_req_module模块(0.7.21)可以通过定义的 键值来限制请求处理的频率.特别的,它可以限制来自单个IP地址的请求处理频率. 限制的方法是通过一种"漏桶"的方法--固定每秒处理的请求数,推迟过多的请求处理. 配置示例 http {     limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;     ...     server {         ...         locati

基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)

郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档适用人员:技术人员 提纲: 所谓异常流量 如何识别异常流量 Apriori如何工作 如何让 Nginx 拦截可疑 IP 0x00,所谓异常流量 有害的异常流量大概分为以下几种: 僵尸网络中的节点对主站发起无目的的密集访问: 黑客.白帽子或某些安全公司为了做漏洞扫描,对主站各个 Web 工程发起字典式

Nginx服务器中限制连接数与限制请求的模块配置教程_nginx

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

Nginx 内置变量,细化规则,真实IP获取及限制连接请求

希望下周测试之后能用起来!!!感觉很有用的. http://www.bzfshop.net/article/176.html http://www.cr173.com/html/19761_1.html http://blog.pixelastic.com/2013/09/27/understanding-nginx-location-blocks-rewrite-rules/ 你 Google 不到的配置   很多时候,我们的网站不是简单的  普通用户IE浏览器  --->  你的服务器  的

3种LVS/Nginx/HAProxy负载均衡器的对比分析

现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术: 一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler.F5.Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护.缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用:另外一种就是类似于LVS/HAProxy.Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用

nginx技术(1)nginx高并发介绍和nginx安装

nginx介绍和安装 一,nginx为什么支持高并发?epoll和select的区别 开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll.nginx就是用这种方式编写的.大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了.我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢? 先简单回顾下如何使用C库封装的3个epoll系统调用吧.