微服务架构―Nginx速率限流

作者 : 开心源码 本文共1523个字,预计阅读时间需要4分钟 发布时间: 2022-05-11 共106人阅读

1 简介

Nginx作为微服务架构的流量接入层,主要用 ngx_http_limit_req_module 板块实现漏桶算法的请求速率的限制。主要流程如下:

Nginx-速率限流主要流程

Nginx-速率限流主要流程

Nginx速率限流的主要流程如下:

① 用户端向Nginx发起请求

② Nginx近burst配置校验

③ burst未配置,则直接进行速率(rate)校验

④ 速率校验超额,则返回指定错误码给用户端

⑤ 速率校验未超额,则将请求转发至后台服务器

⑥ burst配置了且大于0,则进行burst校验

⑦ burst<max,则进行速率(rate)校验

⑧ burst>max,则校验推迟模式(nodelay)能否配置

⑨ 推迟模式已配置,则进入队列进行等待被解决

⑩ 若未配置推迟模式,则直接返回503错误码给用户端

微服务架构―Nginx速率限流

2 核心配置

2.1 limit_req

limit_req 主要使用于配置限流区域、突发容量(默认为0)和能否推迟模式(默认为推迟模式)。

  • 用语法

limit_req zone=[name] [burst=number] [nodelay];
  • 配置段

http,server,location

2.2 limit_req_zone

limit_req_zone 主要使用于配置限流key、存放key对应信息的共享内存区域大小和固定请求速率。该功可以只有Nginx version≥1.7.6的版本才被支持。

  • 用语法

limit_req_zone [key] zone=[name]:[size] rate=[rate];
  • 配置段

  1. http

2.3 limit_conn_log_level

limit_conn_log_level 主要使用于配置被限流后的日志级别,默认为error级别。该功可以只有Nginx version≥0.8.18的版本才被支持。

  • 用语法

limit_conn_log_level info|notice|warn|error;
  • 配置段

http,server,location
  • 默认值

limit_conn_log_level error;

2.4 limit_conn_status

limit_conn_status 主要使用于配置被限流后的返回的状态,默认会返回503状态码。该功可以只有Nginx version≥1.3.15的版本才被支持。

  • 用语法

limit_conn_zone $variable zone=name:size;
  • 配置段

  1. http

  • 默认值

limit_conn_status 503;

3 注意事项

凡事都具备两面性,ngx_http_limit_req_module 板块虽能处理当前面临的并发问题,但也会引入另外少量问题。如前台假如有做LVS或者反向代理商,然后端启使用了该板块功可以,那该机器的IP访问会特别频繁,从而导致经常出现503错误,但能通过设置IP白名单来进行过滤处理该问题,简单配置方式如:

location / {  # 允许一个IP的访问 allow 10.1.1.16; }

4 配置案例

 # 根据用户端IP地址进行统计,设置共享内存大小为20MB,设置固定速率大小为10r/s limit_req_zone $binary_remote_addr zone=addr:20m rate=10r/s;  # 设置并发限流的日志级别为error limit_conn_log_level error;  # 设置触发并发限制时直接返回503状态码 limit_conn_status 503;  # ...  server{  # ... location /limit{  # 设置每个IP的桶容量为10 # nodelay表示超额则立即返回503错误 # 没有配置nodelay表示超过后请求就会排队等待 limit_req zone=addr burst=10 nodelay;  }  } }
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 微服务架构―Nginx速率限流

发表回复