Nginx 限流配置

  • limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
//$binary_remote_addr 表示通过remote_addr这个标识来做限制,"binary_"的目的是缩写内存占用量,是限制同一客户端ip地址。
//zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。
//rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。
limit_req zone=one burst=5 nodelay;
//zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
//burst=5,设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
//nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

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

// 下面配置可以限制特定UA(比如搜索引擎)的访问
http{
    limit_req_zone $anti_spider zone = one: 10 m rate = 10 r / s;
    limit_req zone = one burst = 100 nodelay;
    if ($http_user_agent~ * "googlebot|bingbot|Feedfetcher-Google") {
        set $anti_spider $http_user_agent;
    }
}

其他参数:

Syntax:    limit_req_log_level info | notice | warn | error;
Default:   limit_req_log_level error;
Context:    http, server, location
//设置你所希望的日志级别,当服务器因为频率过高拒绝或者延迟处理请求时可以记下相应级别的日志。 延迟记录的日志级别比拒绝的低一个级别;比如, 如果设置"limit_req_log_level notice", 延迟的日志就是info级别。

Syntax:  limit_req_status code;
Default: limit_req_status 503;
Context: http, server, location
//设置拒绝请求的返回值 在400~599之间。
  • limit_req_conn 用来限制单个IP的请求数。并非所有的连接都被计数。只有在服务器处理了请求并且已经读取了整个请求头时,连接才被计数。
Syntax:    limit_conn_zone key zone=name:size;
Default:    —
Context:
// 注: key的值为$binary_remote_addr 而不是 $ remote_addr;参考官方文档:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn_zone

Syntax:    limit_conn zone number;
Default:    —
Context:    http, server, location

// 一次只允许每个IP地址一个连接
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    location /download/ {
        limit_conn addr 1;
      }
}

//限制每个客户端IP连接到服务器的数量 为 10,同时限制连接到虚拟服务器的总数 为100
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;
}

其他配置:

// 当服务器限制连接数时,设置所需的日志记录级别
Syntax: limit_conn_log_level info | notice | warn | error;
Default: limit_conn_log_level error;
Context: http, server, location

// 设置状态代码以响应被拒绝的请求而返回
Syntax:    limit_conn_status code;
Default:   limit_conn_status 503;
Context:    http, server, location

Original: https://www.cnblogs.com/zhuchenglin/p/12741299.html
Author: lin_zone
Title: Nginx 限流配置

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543543/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Invalid bound statement (not found)

    SpringBoot 配置多数据源 无非就是namespace写错了、mapper接口或者xml文件名字没对应上等 mapper.xml中的namespace和实际的mapper文…

    Java 2023年6月13日
    063
  • 集合remove()方法相关问题

    学习集合的过程中,了解到一个有关于remove()方法的有关特性,特此记录 首先remove方法的格式: collection.remove(Object o); 这是指对集合co…

    Java 2023年6月7日
    082
  • Maven 快速入门

    一、简介 Maven 是一个用于构建/管理任何基于Java项目的工具,其本身也是基于Java的 因此需要Java环境。其最初是为了简化 Jakarta Turbine 项目的构建而…

    Java 2023年6月6日
    078
  • Java代码结构简述

    结构 顺序结构 JAVA的基本结构就是顺序结构,除非特意指明,否则就按照顺序,一句一句执行。 顺序结构是最简单的算法结构 语句与语句之间,框与框之间按照从上到下的顺序执行, *它是…

    Java 2023年6月9日
    090
  • mybatis insert返回主键的三种方式

    1.情景展示 我们知道,表与表之间的关联关系,通常使用主键,所以在处理复杂业务时,比如:按顺序插入多张表; 我们就需要在插入B表之间拿到插入A表后的主键,如何实现? 2.具体实现 …

    Java 2023年5月30日
    076
  • 运用Spring Aop,一个注解实现日志记录

    运用Spring Aop,一个注解实现日志记录 1. 介绍 我们都知道Spring框架的两大特性分别是 IOC (控制反转)和 AOP (面向切面),这个是每一个Spring学习视…

    Java 2023年6月8日
    089
  • Redis学习笔记

    Redis 参考博客https://www.cnblogs.com/beiluowuzheng/https://www.cnblogs.com/hunternet/如有侵权,请联系…

    Java 2023年6月5日
    071
  • 基于java实现的简单区块链

    使用java创建第一个非常基本的区块链 实现一个简单的工作量证明系统即挖矿 区块链就是一串或者是一系列区块的集合,类似于链表的概念,每个区块都指向于后面一个区块,然后顺序的连接在一…

    Java 2023年5月29日
    073
  • HashMap源码及原理详解

    HashMap概要 基本属性 Node节点源码 TreeNode节点源码 容量初始化 容量为2的幂次方的好处 哈希的计算 哈希冲突 put – 添加元素 get &#8…

    Java 2023年6月9日
    090
  • MyBatis核心配置文件以及标签的说明

    mybatis的核心配置文件,以及各个属性的介绍 <?xml version="1.0" encoding="UTF-8" ?>…

    Java 2023年6月13日
    065
  • 【每日算法】动态规划四

    难度[简单] &#x7ED9;&#x5B9A;&#x4E00;&#x4E2A;&#x6574;&#x6570;&#x6570…

    Java 2023年6月9日
    054
  • 后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题

    一、前言 我们在实际开发中肯定会遇到后端的时间传到前端是这个样子的: 2022-08-02T15:43:50这个时候前后端就开始踢皮球了,!!后端说:前端来做就可!前端说:后端来做…

    Java 2023年6月15日
    073
  • Object o = new Object()占多少个字节?-对象的内存布局

    一、先上答案 这个问题有坑,有两种回答 第一种解释: object实例对象,占16个字节。 第二种解释: Object o:普通对象指针(ordinary object point…

    Java 2023年6月9日
    0127
  • opencv-python函数

    opencv-python读取、展示和存储图像 cv2.imshow(windows_name, image) 函数参数一: 窗口名称(字符串)函数参数二: 图像对象,类型是num…

    Java 2023年6月9日
    072
  • 【原创】jssh linux scp ssh 免密登录开源工具

    项目名 JSSH git地址: 项目介绍 linux scp(文件上传,下载) shell命令的java ssh jar和linux expect工具,主要是避免shell 密码手…

    Java 2023年6月8日
    085
  • Nginx中的Rewrite的重定向配置与实践

    简介:Rewrite是Nginx服务器提供的一个重要的功能,它可以实现URL重定向功能。回到顶部 一:理解地址重写 与 地址转发的含义。 地址重写与 地址转发是两个不同的概念。 地…

    Java 2023年5月30日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球