Nginx限流笔记

Nginx 限流笔记

前言

Nginx 官网:http://nginx.org/

Nginx 限流

Nginx 提供两种限流方式

  1. 控制速率
  2. 控制并发连接数

一、控制速率

控制速率的方式之一就是采用漏桶算法

1)漏桶算法实现控制速率限流

漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率

2)Nginx 配置

  1. 首先在 Nginx 配置文件配置缓存空间

    # $binary_remote_addr 表示根据请求 ip 进行限流,
    # zone=contentRateLimit:10m 表示缓存命令空间
    # rate=2r/s 表示每秒2个请求
    limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;
    
  2. 在 location 中使用限流配置

    # 使用定义的限流配置,zone=缓存命令空间
    limit_req zone=contentRateLimit
    
  3. 可以设置漏桶大小(在 location 中使用限流配置)

    # 使用定义的限流配置,zone=缓存命令空间,burst 表示每秒处理2个请求,其他的请求放到队列中,超过 burst 限制的,直接拒绝处理
    limit_req zone=contentRateLimit burst=4
    

二、控制并发连接数(连接数)

ngx_http_limit_conn_module 提供了限制连接数的能力。主要是利用 limit_conn_zone 和 limit_conn 两个指令。

利用连接数限制某一个用户的 ip 连接的数量来控制流量。

注意:并非所有连接都被计算在内,只有当服务器正在处理请求并且已经读取了整个请求头时,才会计算有效连接。

配置语法:

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

利用连接数限制某一个用户的 IP 连接的数量来控制流量

Nginx 配置

1)根据 ip 地址来限制,存储内存大小为 10M

# $binary_remote_addr 表示根据请求 ip 进行限流,
# zone=contentRateLimit:10m 表示缓存命令空间
limit_conn_zone $binary_remote_addr zone=add:1m
  1. 在 location 中配置
# 表示每个地址每秒钟两个请求
limit_conn addr 2;

限制每一个客户端 IP 与服务器的连接数,同时限制与虚拟机的连接总数

配置如下:

# 定义缓存空间
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
    listen 80;
    server_name localhost;
    charset utf-8;
    location / {
    	# 单个客户端 IP 与服务器的连接数
    	limit_conn perip 10;
    	# 限制与服务器的总连接数
    	limit_conn perserver 100;
    	root html;
    	index index.html index.htm;
    }
}
发布了321 篇原创文章 · 获赞 132 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/SIMBA1949/article/details/102487753