Nginx 限速模块一览

为了保护服务器不被刷流量,或者业务方面的一些限制,需要做一些限速措施。

一、http 请求并发连接数模块:ngx_http_limit_conn_module

这个模块可以设置每个定义的变量(比如客户端ip)的并发连接数,比如:某个客户端ip在同一时间内的连接数不能超过某个值。

语法:

  1. 定义限制链接区域:
Syntax: limit_conn_zone key zone=name:size;
Default:    —
Context:    http
  1. 设置连接数限制:
Syntax: limit_conn zone number;
Default:    —
Context:    http, server, location

示例:

# 根据客户端ip进行限制,区域名称为perip,总容量为10m
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
    ...
    # 使用perip区域名称(zone name),同一时间并发数不得超过10
    limit_conn perip 10;
    limit_conn perserver 100;
}

二、tcp 请求并发连接数模块:ngx_stream_limit_conn_module(since 1.9.3)

这是自 nginx 1.9.3 提供的 TCP负载均衡的限制流连接数模块,用法等同于ngx_http_limit_conn_module

三、http 请求限制模块:ngx_http_limit_req_module

这个模块用来限制每个被定义的变量(比如客户端ip)的访问速率,比如:通俗点来讲,每个ip可以每秒请求几次。

语法:

  1. 定义限速区:
Syntax: limit_req_zone key zone=name:size rate=rate;
Default:    —
Context:    http
  1. 设置限速:
Syntax: limit_req zone=name [burst=number] [nodelay];
Default:    —
Context:    http, server, location

示例:


#limit_req_zone 为定义一个限速区域,binary_remote_addr代表一个客户端ip,zone perip为区域名称,10m为总容量,rate=1r/s代表每秒只接受1个请求
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
server {
    ...
    # 代表使用zone为preip的配置,设置的速率1个每秒,缓冲区5个请求,如果超过速率和缓存区大小,直接返回503异常码
    limit_req zone=perip burst=5 nodelay;
    # 使用persever的配置,10个请求每秒,缓冲区为10个请求,没有nodelay参数,则会将请求延迟处理
    limit_req zone=perserver burst=10;
}

四、nginx http 核心模块:ngx_http_core_module

使用到了其中的limit_rate命令,可以限制响应速率比如:

limit_rate 1024K;

代表单词请求响应量最多为1024K。

参考链接

转载于:https://www.cnblogs.com/liushijie/p/5376372.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值