Nginx 如何限制访问频率,下载速率和并发连接数的方法

一、 限制访问频率、并发连接、下载速度用到的模块和指令概述

  • ngx_http_limit_req_module :用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”
  • ngx_http_limit_conn_module :用来限制同一时间连接数,即并发限制
  • limit_rate和limit_rate_after :下载速度设置

漏桶算法(leaky bucket)

算法思想是:

  • 水(请求)从上方倒入水桶,从水桶下方流出(被处理)
  • 来不及流出的水存在水桶中(缓冲),以固定速率流出;
  • 水桶满后水溢出(丢弃)。
  • 这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。
  • Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值

二、限制URL访问请求频率

http{
    ... 

  limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s;
  limit_req_zone $binary_remote_addr $uri zone=two:30m rate=20r/s;
  limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=20r/s;
  limit_req_status 444;
    ... 

  server{
      ... 

    limit_req zone=two burst=15 nodelay;
    ... 

  }
}

解释:

limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s;

  • $binary_remote_addr 是限制同一客户端ip地址不同URL
  • zone:区域名one 存放session30M
  • rate: 每秒钟请求数

limit_req_zone $binary_remote_addr $uri zone=two:30m rate=20r/s;

  • $binary_remote_addr $uri 是限制同一客户端ip地址 相同URL
  • zone:区域名two 存放session30M
  • rate: 每秒钟请求数

limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=20r/s;

  • $binary_remote_addr $request_uri 是限制同一客户端ip地址 相同URL
  • zone:区域名two 存放session30M
  • rate: 每秒钟请求数

limit_req zone=two burst=15 nodelay;

  • zone引用 区域为two,
  • burst 设置一个大小为15的缓冲区,当有大量请求(爆发)过来时,访问超过了上面的限制可以先放到缓冲区内。
  • nodelay 一般是和burst一起使用的,如果设置了nodelay,当访问超过了频次而且缓冲区也满的情况下会直接返回503,如果设置了,则所有大的请求会等待排队

三、并发连接数限制

案例一:

http {
  ... 

  limit_conn_log_level error;
  limit_conn_zone $binary_remote_addr zone=addr:10m;
  limit_conn_status 503; 

  ... 

  server { 

    ... 

    location /download/ {
      limit_conn addr 1; 单个客户端IP限制为1
    }
    ... 

}

案例二:

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

  server {
    ...
    limit_conn perip 10;  #单个客户端ip与服务器的连接数
    limit_conn perserver 100; #限制与服务器的总连接数
  }
}

四、限制下载速度

location /download {
  limit_rate 128k;
 } 

#如果想设置用户下载文件的前10m大小时不限速,大于10m后再以128kb/s限速可以增加以下配内容 

location /download {
    limit_rate_after 10m;
    limit_rate 128k;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 在nginx中实现单位时间内限制访问频率的教程

    首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出).nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开. 步骤如下: 首先nginx.conf里面添加如下内容: map $http_x_forwarded_for $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; } #

  • Nginx限制搜索引擎爬虫频率、禁止屏蔽网络爬虫配置示例

    复制代码 代码如下: #全局配置 limit_req_zone $anti_spider zone=anti_spider:10m rate=15r/m; #某个server中  limit_req zone=anti_spider burst=30 nodelay;  if ($http_user_agent ~* "xxspider|xxbot") {  set $anti_spider $http_user_agent; } 超过设置的限定频率,就会给spider一个503. 上

  • nginx修改配置限制恶意爬虫频率

    如何在nginx中限制恶意网络爬虫抓取内容呢?也就是限制下恶意爬虫的抓取频率.下面来一起看看. 今天在微博发现@金荣叶 的处理方法很灵活,可以动态设定一个爬虫的频率,达到减轻服务器负载,并且不至于封杀爬虫. #全局配置 limit_req_zone $anti_spider zone=anti_spider:10m rate=15r/m; #某个server中 limit_req zone=anti_spider burst=30 nodelay; if ($http_user_agent ~*

  • Nginx 如何限制访问频率,下载速率和并发连接数的方法

    一. 限制访问频率.并发连接.下载速度用到的模块和指令概述 ngx_http_limit_req_module :用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket" ngx_http_limit_conn_module :用来限制同一时间连接数,即并发限制 limit_rate和limit_rate_after :下载速度设置 漏桶算法(leaky bucket) 算法思想是: 水(请求)从上方倒入水桶,从水桶下方流出(被处理) 来不及流出的水存在水桶

  • nginx和tomcat访问图片和静态页面的配置方法

    生产环境下,有时候需要访问图片,正常需要应用ftp.nginx等配套使用,但是有时候为了简化,可以用以下的两种简单的访问,说实话,就是为了偷懒,但是效果是能有的,这就行了,所以今天做这个简化版的方便大家应急之用. 第一种方法:nginx配置下 1.创建文件路径: [root@localhost /]# mkdir /data/soft/ [root@localhost ~]# cd /data/soft/ [root@localhost soft]# mkdir html images 2.在i

  • nginx配置限制同一个ip的访问频率方法

    1.在nginx.conf里的http{}里加上如下代码: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; 2.在需要限制并发数和下载带宽的网站配置server{}里加上如下代码: limit_conn perip 2; limit_conn perserver 20; limit_rate 100k; 补充说明下参数: $binary_rem

  • CentOS7 配置Nginx支持HTTPS访问的实现方案

    CentOS7配置Nginx支持HTTPS访问 1.安装git和bc yum -y install git bc 2.安装Nginx 1.准备: yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 2.下载: wget https://nginx.org/download/nginx-1.11.6.tar.gz 3.解压: tar zxvf nginx-1.11.6.tar.gz 4.编译安装:

  • Go 如何基于IP限制HTTP访问频率的方法实现

    如果你运行 HTTP 服务,并且希望限制 HTTP 的访问频率,那么你可以借助一些比较稳定的工具,例如: github.com/didip/tollbooth.不过如果你构建的应用比较简单,也可以自己来实现. 我们可以使用一个现有的 Go 包 x/time/rate. 本课程,我们将创建一个简单的中间件实现基于 IP 限制 HTTP 访问频率. 简单的 HTTP 服务 让我们从创建一个简单的 HTTP 服务开始,它有非常简单的终端. 但是,因为它的访问频率可能非常高,因此我们要为它添加频率限制.

  • Nginx 禁止直接访问目录或文件的操作方法

    目录 前言 第一种:autoindex 配置 一级目录或整个虚拟主机开启目录流量 单独目录开启目录流量 二级目录开启目录流量 虚拟目录开启目录流量 第二种:nginx location 配置 一.禁止访问某些后缀文件 二.禁止访问目录或目录下文件 三.禁止访问某个目录下的指定文件后缀文件 四.nginx location 匹配相关 五.nginx 配置图片直接下载不打开 前言 Nginx 默认是不允许列出整个目录的. 如需此功能,打开 nginx.conf 文件或你要启用目录浏览虚拟主机的配置文

  • C# 站点IP访问频率限制 针对单个站点的实现方法

    站点IP访问频率限制 针对单个站点 using System; using System.Collections.Generic; using System.IO; //using System.Linq; using System.Web; // <summary> // IP访问频率控制 // </summary> public static class IPCacheManager { /// <summary> /// IP缓存集合 /// </summa

  • Python3访问并下载网页内容的方法

    本文实例讲述了Python3访问并下载网页内容的方法.分享给大家供大家参考.具体如下: #!/usr/local/bin/python3.2 import urllib.request,io,os,sys req = urllib.request.Request("http://www.google.com") f = urllib.request.urlopen(req) s = f.read() s = s.decode('gbk','ignore') mdir = sys.pat

  • Linux Nginx 配置SSL访问实例详解

    Linux Nginx 配置SSL访问实例详解 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: $ cd /usr/local/nginx/conf 创建服务器私钥,命令会让你输入一个口令: $ openssl genrsa -des3 -out server.key 1024 创建签名请求的证书(CSR): $ openssl req -new -key server.key -out server.csr 在加载SSL支持的Nginx并使用上述私钥

随机推荐