美文网首页
Nginx 学习之旅 | Nginx 限速

Nginx 学习之旅 | Nginx 限速

作者: stamSuper | 来源:发表于2020-02-26 15:37 被阅读0次

限速介绍

1、限速该特性可以限制某个用户在一个给定时间段内能够产生的http请求数。请求可以简单到就是一个对于主页的GET请求或者一个登录表格的请求。
例如12306春节抢票,限制特定ip的刷票,就非常有必要。防止服务器被海量刷新请求瘫痪

2、限速也可以用于安全目的,比如暴力密码破解攻击。通过限制进来的请求速率,并且(结合日志)标记出目标URLs来帮助DDoS攻击。一般的说,限流是用在保护上游服务器不被在同一时刻的大量用户淹没

应用场景

1、防止DDoS 防御
2、下载场景保护IO
大量的下载,也会增大服务器磁盘的读写,限速也可以保护磁盘,减小磁盘的压力

限速原理

image.png
    算法思想是:
     ⽔(请求)从上⽅倒⼊⽔桶,从⽔桶下⽅流出(被处理);
     来不及流出的⽔存在⽔桶中(缓冲),以固定速率流出;
     ⽔桶满后⽔溢出(丢弃)。
     这个算法的核⼼是:缓存请求、匀速处理、多余的请求直接丢弃。

实现方式

Nginx 官方版本限制Ip的连接和并发分别有两个模块:
1、limit_req_zone 用来限制单位时间内的请求数,即速率限制。

    limit_req_zone 参数配置
    Syntax: limit_req zone=name [burst=number] [nodelay];
    Default: —
    Context: http, server, location

限速案例1
基于IP对下载速率做限制 限制每秒处理1次请求,对突发超过5个以后的请求放⼊缓存区

    http {
        limit_req_zone $binary_remote_addr zone=baism :10m rate=1r/s;
        server {
            location /test/ {
                limit_req zone=baism burst=5 nodelay;
            }
        }
    }


    limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s;
    第⼀个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的⽬的是缩写内存占⽤量,是限制同⼀客户端ip地址。主要是针对用户原IP进行限制
    第⼆个参数:zone=baism:10m表示⽣成⼀个⼤⼩为10M,名字为baism 的内存区域,⽤来存储访问的频次信息。
    第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这⾥限制的是每秒1次,还可以有⽐如30r/m的。

    limit_req zone=baism burst=5 nodelay;
    第⼀个参数:zone=baism 设置使⽤哪个配置区域来做限制,与上⾯limit_req_zone ⾥的name对应。
    第⼆个参数:burst=5,重点说明⼀下这个配置,burst爆发的意思,这个配置的意思是设置⼀个⼤⼩为5的缓冲区当有⼤量请求(爆发)过来时,超过了访问频次限制的请

求可以先放到这个缓冲区内。
第三个参数:nodelay,如果设置,超过访问频次⽽且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队

2、limit_req_conn 用来限制同一时间连接数,即并发数。

基于IP做连接限制 限制同⼀IP并发为1 下载速度为100K
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen 80;
        server_name localhost;
        location / {
            root html;
            index index.html index.htm;
        }
        location /test {
            limit_conn addr 1;
            limit_rate 100k;
        }
    }

综合案例

    http {
        include mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 65;
        #基于IP做连接限制 限制同⼀IP并发为1 下载速度为100K
        limit_conn_zone $binary_remote_addr zone=addr:10m;
        #基于IP对下载速率做限制 限制每秒处理1次请求,对突发超过5个以后的请求放⼊缓存区
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
        server {
            listen 80;
            server_name localhost;
            location / {
                root html;
                index index.html index.htm;
            }
            location /abc {
                limit_req zone=one burst=5 nodelay;
                limit_conn addr 1;
                limit_rate 100k;
            }
   }

相关文章

  • Nginx 学习之旅 | Nginx 限速

    限速介绍 1、限速该特性可以限制某个用户在一个给定时间段内能够产生的http请求数。请求可以简单到就是一个对于主页...

  • Nginx限速模块初探

    转载:Nginx限速模块初探 云栖君导读:Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay...

  • [转]Nginx限速模块初探

    转自 Nginx限速模块初探 Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay参数是什么意...

  • 39笔记--模块

    今日内容 创建环境 8.nginx开启目录浏览 提供下载功能 Nginx访问控制 限速 nginx状态指标,俗称...

  • Nginx 学习之旅 | Nginx 优化

    优化目的 标准情况下,软件默认的参数都是对安装软件的硬件标准来设置的,⽬前我们服务器的硬件资源远远⼤于要求的标准,...

  • Nginx 学习之旅 | Nginx 集群

    传统web服务模型 集群 将多个物理机器组成一个逻辑计算机 , 实现负载均衡和容器 计算机集群简称集群,是一种计算...

  • Nginx 学习之旅 | nginx 简介

    1、Nginx (engine x) 是一款由俄罗斯的程序设计师 lgor Sysoe所开发高性能的 Web 和 ...

  • nginx学习资料

    nginx学习 bilibili尚硅谷nginx学习资料bilibili尚硅谷nginx学习资料对应文档 ngin...

  • Nginx 学习之旅 | Nginx 缓存应用

    缓存介绍 页面打开速度 1、服务器宽带2、服务器响应速度加机器,集群3、传输距离在不同区域放置缓存服务器4、网络延...

  • Nginx 学习之旅 | Nginx 反向代理

    引言:有反向代理,就有正向代理。正向代理:就是代用户上网。举例:像长城这样的网络运营商,在他们公司有大量的代理服务...

网友评论

      本文标题:Nginx 学习之旅 | Nginx 限速

      本文链接:https://www.haomeiwen.com/subject/hhnvchtx.html