Nginx限流笔记

简介: Nginx限流笔记

Nginx 限流笔记

前言

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


Nginx 限流

Nginx 提供两种限流方式


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


一、控制速率

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


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


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


2)Nginx 配置


  • 首先在 Nginx 配置文件配置缓存空间
# $binary_remote_addr 表示根据请求 ip 进行限流,
# zone=contentRateLimit:10m 表示缓存命令空间
# rate=2r/s 表示每秒2个请求
limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;


  • 在 location 中使用限流配置
# 使用定义的限流配置,zone=缓存命令空间
limit_req zone=contentRateLimit


可以设置漏桶大小(在 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


2)在 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;
    }
}


目录
相关文章
|
7月前
|
存储 缓存 负载均衡
Nginx入门笔记
Nginx入门笔记
229 0
|
16天前
|
存储 应用服务中间件 nginx
Nginx限流怎么做
Nginx 通过 limit_req 模块实现限流,保护后端服务器。配置示例中,定义了限流区域 `limit`,每秒允许 10 个请求,客户端 IP 超过限流后允许 20 个突发请求,超出则立即返回 503 错误。
42 6
|
6月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
2月前
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
205 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
3月前
|
JavaScript Java 应用服务中间件
|
4月前
|
应用服务中间件 Linux nginx
高并发下Nginx配置限流
【8月更文挑战第16天】
83 1
|
5月前
|
应用服务中间件 Linux nginx
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
《FFmpeg开发实战》书中介绍了如何使用FFmpeg向网络推流,简单流媒体服务器MediaMTX不适用于复杂业务。nginx-rtmp是Nginx的RTMP模块,提供基本流媒体服务。要在Linux上集成rtmp,需从官方下载nginx和nginx-rtmp-module源码,解压后在nginx目录配置并添加rtmp模块,编译安装。配置nginx.conf启用RTMP服务,监听1935端口。使用ffmpeg推流测试,如能通过VLC播放,表明nginx-rtmp运行正常。更多详情见书本。
141 0
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
|
5月前
|
监控 应用服务中间件 nginx
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
|
5月前
|
应用服务中间件 nginx 缓存
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
|
6月前
|
缓存 负载均衡 应用服务中间件
技术笔记:Nginx配置详解
技术笔记:Nginx配置详解
33 0