美文网首页
2.2 限制使用

2.2 限制使用

作者: 东风微鸣 | 来源:发表于2019-02-18 21:58 被阅读0次

2.2 限制使用

2.2.0 介绍

该章节关注于: 限制使用和滥用, 连接数, 请求服务速率, 带宽使用量. 区分开连接和请求是很重要的: 连接(TCP连接)是网络层, 在这层上, 请求被执行, 因此两者并不一样.

在HTTP/1和HTTP/1.1中, 一个连接请求只能使用一次; 而在HTTP/2中, 多个请求可以使用同一个TCP连接.

2.2.1 限制连接

问题

你需要基于预定义的key来限制连接数, 比如key是客户端IP地址.

解决方案

创建一个共享内存区域来存放连接metrics, 并使用limit_conn 指令来限制打开的连接数:

http {
  limit_conn_zone $binary_remote_addr zone=limitbyaddr:10m;
  limit_conn_status 429;
  ...
  server {
    ...
      limit_conn limitbyaddr 40;
    ...
  }
}

:heavy_check_mark:

429: Too Many Requests

预定义的key用的是:二进制格式的客户端IP地址.

讨论

使用IP地址, 就像上个例子中那样, 如果很多用户都在同一个网络来自同一个IP可能很危险, 比如用的是一个NAT(网络地址转换). 整个组都会被限制. limit_conn_zone指令只适用于HTTP块. 可以利用在HTTP块中的NGINX的任何变量来构建一个字符串来限制. 利用变量可以在应用级别识别具体的用户, 像是session cookie, 基于使用案例可能是一个更干净的解决方案. limit_connlimit_conn_status指令在HTTP, server, 和location块中都能用. limit_conn_status默认是503, 服务不可用. 429会更合适, 因为500界别的服务不可用意味着错误.

2.2.2 限制速率

问题

你需要基于预定义的key来限制请求速率, 比如客户端IP地址.

解决方案

利用速率限制模块来限制:

http {
  limit_req_zone $binary_remote_addr zone=limitbyaddr:10m rate=1r/s;
  limit_req_status 429;
  ...;
  server {
    ...
      limit_req zone=limitbyaddr burst=10 nodelay;
    ...;
  }
}

这个zone用关键字参数设置了速率. limit_req指令有2个关键字参数: zoneburst. 当给定zone的请求速率超出了, 请求会延迟直到达到他们的最大burst size, 这个由burst关键字参数提供. 默认burst关键字参数为0. limit_req也有第三个可选的参数, nodelay. 这个参数允许客户端在被限制之前使用它的burst而不用延迟. limit_req_statuslimit_req 可以用在HTTP, server, 和location. limit_req_zone只适用于HTTP块.

讨论

速率限制模块在组织恶意请求, 同时仍为每个人提供一定质量的服务时非常有用. 有很多限制请求速率的原因, 其中之一就是安全. 你可以通过在你的登陆页面设置非常严格的限制来防止恶意攻击. 你可以通过设置对所有请求的完善的限制来阻止恶意用户尝试对你的应用使用拒绝式服务攻击或浪费资源的计划. 速率限制模块的配置和2.2.1中的很类似. 速率可以被设置为每秒多少请求或每分钟多少请求. 当超过限制, 会记录事件日志. 例子中没有提到这个指令limit_req_log_level , 默认是error, 但是也可以设置为info , notice, warn.

2.2.3 限制带宽

相关文章

  • 2.2 限制使用

    2.2 限制使用 2.2.0 介绍 该章节关注于: 限制使用和滥用, 连接数, 请求服务速率, 带宽使用量. 区分...

  • contentEditable使用及遇到的问题

    1. 基本使用 2. 开发中遇到的问题 2.1 聚焦、失焦 2.2 输入框字数超限制后,光标会移动到第一个...

  • Android Studio 升级 2.2 Maven 插件不能

    Android Studio 升级 2.2 Maven 插件不能使用的问题 AS 升级到到 2.2 后,发现 M...

  • 编译 Gradle Plugin

    下载 Gradle 2.2 在 地址 中选择 版本 2.2 下载。 下载源码 下载 repo 可以使用 HomeB...

  • 3.Greenplum数据导入

    2.2 导入 2.2.1 使用gpfdist导入 2.2.1.1 启动gpfdist服务 使用ser...

  • Result window is too large, from

    1、报错 2、原因 2.1 查询结果中 hits.total.value 值最大为10000的限制 2.2 分页查...

  • 使用限制

    小木年轻时买了很多漂亮的衣服,想着可以穿一辈子。后来发现,生完小孩后身体发胖,以前的衣服再也穿不上了。有些衣服即使...

  • vue中使用 Animate.css

    1、安装 2、引入使用 2.1全局引入使用 2.2 局部引入使用(比较推荐这种方式)

  • 第2章

    2.1选区的作用:限制操作范围 2.2选区工具及分类: 2.2.1规则选区工具:圆形 矩形 单行 单列 2.2.2...

  • 模板模式

    1.使用场景 2.DEMO 2.1 2.2

网友评论

      本文标题:2.2 限制使用

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